使用dbms_crypto包加密关键列数据
对于业务系统中常见的需要加密的列我们可以在应用层来实现,也可以在数据库层实现,
自己验证了一下使用dbms_crypto包来封装函数实现关键列的加密。
1.数据库版本
SQL> select * from v$version; BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4. - Prod
PL/SQL Release 10.2.0.4. - Production
CORE 10.2.0.4. Production
TNS for Linux: Version 10.2.0.4. - Production
NLSRTL Version 10.2.0.4. - Production
2.创建加密函数
SQL> conn /as sysdba
Connected.
SQL> create or replace function fun_enable_crypto(v_str varchar2,
v_key varchar2 default 'abcdefgh')
return raw
is
--v_str_raw raw():=utl_raw.cast_to_raw(v_str);
v_str_raw raw():=utl_i18n.string_to_raw(v_str,'AL32UTF8');
v_key_raw raw():=utl_i18n.string_to_raw(v_key,'AL32UTF8');
result_crypto raw();
begin
result_crypto:=dbms_crypto.encrypt(src=>v_str_raw,
typ=>dbms_crypto.DES_CBC_PKCS5,
key=>v_key_raw);
return result_crypto;
end;
/ Function created.
3.创建解密函数
SQL> create or replace function fun_disable_crypto(encrypto raw,
v_key varchar2 default 'abcdefgh')
return varchar2
is
v_key_raw raw():=utl_i18n.string_to_raw(v_key,'AL32UTF8');
result_crypto raw();
begin
result_crypto:=dbms_crypto.decrypt(src => encrypto,
typ => dbms_crypto.DES_CBC_PKCS5,
key=>v_key_raw);
return utl_i18n.raw_to_char(result_crypto,'AL32UTF8');
end;
/ Function created.
3.验证加密解密
SQL> select fun_enable_crypto('中国.北京.海淀') as crypto_info from dual;
CRYPTO_INFO
--------------------------------------------------------------------------------
60E37C977B92E7C4F36FEF2BFEC55494CF57A8DB9F10FEB0
SQL> select fun_disable_crypto('60E37C977B92E7C4F36FEF2BFEC55494CF57A8DB9F10FEB0') as rel_info from dual;
REL_INFO
--------------------------------------------------------------------------------
中国.北京.海淀
--自定义一个key
SQL> select fun_enable_crypto('中国.北京.海淀','1drQdse5Nw') as crypto_info from dual;
CRYPTO_INFO
--------------------------------------------------------------------------------
D0FD950EAF47B20E331500444FD8D1090ECB7EF519750BAF
SQL> select fun_disable_crypto('D0FD950EAF47B20E331500444FD8D1090ECB7EF519750BAF','1drQdse5Nw')
as rel_info from dual;
REL_INFO
--------------------------------------------------------------------------------
中国.北京.海淀
参考:
http://www.xifenfei.com/5724.html
http://blog.csdn.net/rznice/article/details/7402850
http://blog.163.com/donfang_jianping/blog/static/1364739512012113053323211/
使用dbms_crypto包加密关键列数据的更多相关文章
- VLOOKUP和MATCH嵌套以高效引用多列数据
VLOOKUP函数在日常工作中十分常见,以至于你要是没用过VLOOKUP函数,你都不好意思说你懂EXCEL. 一般情况下,我们需要在源数据中查找某个指定列的数据,就会用到VLOOKUP函数(如果是指定 ...
- Oracle 列数据聚合方法汇总
网上流传众多列数据聚合方法,现将各方法整理汇总,以做备忘. wm_concat 该方法来自wmsys下的wm_concat函数,属于Oracle内部函数,返回值类型varchar2,最大字符数4000 ...
- c# 如何中List<object>中去掉object对象中的重复列数据?
//去掉重复 var title = modelList.GroupBy(m => m.Title.ToLower().Trim()).Select(m => new { ID = m.F ...
- 视图合并、hash join连接列数据分布不均匀引发的惨案
表大小 SQL> select count(*) from agent.TB_AGENT_INFO; COUNT(*) ---------- 1751 SQL> select count( ...
- pentaho cde 选择性的显示多列数据
在业务需求中,有时候会有这种需要,就是查出来可多列数据,而我只想画出来其中的一列或者说某一列,而pentaho会默认画出查出来的所有数据,而不断的更改数据源又太麻烦,这时就要用到resders方法了. ...
- 一个通用的DataGridView导出Excel扩展方法(支持列数据格式化)
假如数据库表中某个字段存放的值“1”和“0”分别代表“是”和“否”,要在DataGridView中显示“是”和“否”,一般用两种方法,一种是在sql中直接判断获取,另一种是在DataGridView的 ...
- Jqgrid入门-Jqgrid列数据拖动(七)
上一章提到在Jqgrid中如何设置二级表头,这一章节主要探讨Jqgrid表格里面的数据如果实现拖动功能,比如你想把第一行的数据拖到当前页的最后一行,或者其他位置. Jqgrid表格插件自己没有 ...
- EXTJS4.2 控件之Grid 根据数据源某列数据不同绑定不同的控件setEditor
Grid 根据数据源某列数据不同绑定不同的控件,例如:文本框和下拉框 主要代码写在grid的 plugins: [rowEditing],下面这是定义的rowEditing对象,这里面的要定义成 E ...
- SQL列数据转换为字符串
行列转换,将列数据转换为字符串输出 ) SET @center_JZHW = ( SELECT DISTINCT STUFF( ( SELECT ',' + ce_code FROM ap_cente ...
随机推荐
- ado.net增删改查操作
ado.net是数据库访问技术将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层最基础的数据库访问技术 使用ado.net对数据 ...
- C#复习、面向对象阶段开始
C#复习:在控制台程序中使用结构体.集合,完成下列要求项目要求:一.连续输入5个学生的信息,每个学生都有以下4个内容:1.序号 - 根据输入的顺序自动生成,不需要手动填写,如输入第一个学生的序号是1, ...
- Jmeter 分布式性能测试
作为一个纯 JAVA 的GUI应用,JMeter 对于CPU和内存的消耗还是很惊人的,所以当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至还会引起JAVA内存溢出的错 ...
- Servlet域对象ServletContext小应用------计算网站访问量
package cn.yzu; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servlet ...
- DOM系列---基础篇
DOM系列---基础篇 DOM (Document Object Model) 即文档对象模型, 针对 HTML 和 XML 文档的 API (应用程序接口) .DOM 描绘了一个层次化的节点树, ...
- SPOJ TSUM Triple Sums(FFT + 容斥)
题目 Source http://www.spoj.com/problems/TSUM/ Description You're given a sequence s of N distinct int ...
- Leetcode Sum Root to Leaf Numbers
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...
- SQL笔记----在一个关系表中操作列
使用alter关键字,可以为一个表添加新的列. 比如: 给Persons的表中添加一列,名字为Birthday,类型是date. ALTER TABLE Persons ADD Birthday da ...
- vs2013单元测试第二部分
上次的随笔说还没弄懂,现在已经弄懂,就让我说说我的方法吧. 1.点击文件——>新建——>项目——>c#——>控制台应用程序,确定,之后如图所示 2.在一定位置写上要进行单元检测 ...
- PHP面向对象学习三 类的抽象方法和类
一个类中至少有一个方法是抽象的,我们称之为抽象类. 所以如果定义抽象类首先定义抽象方法. 1.类中至少有一个抽象方法 2.抽象方法不允许有{ } 3.抽象方法前面必须要加abstract 抽象类的几个 ...