使用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 ...
随机推荐
- Jmeter之Badboy录制脚本及简化脚本http请求(三)
测试脚本的精简对于测试来说是一项基础的能力,因为你得看懂一行脚本代表的是什么意思,是怎么运行的,做了什么内容.才能得到对应的测试结果分析. 上一节介绍的代理服务器的录制童鞋们也明白了,有点麻烦,而且不 ...
- JMeter监控Linux服务器资源案例
JMeter是一款压力测试工具,我们也可以用它来监控服务器资源使用情况.JMeter正常自带可以通过Tomcat的/manager/status来监控服务资源使用情况.这种情况只能监控Tomcat支持 ...
- LoadRunner常见函数分析
LoadRunner常见函数分析 ?%Ze\N%?~"_J}.t051Testing软件测试网;FQ X%L|GO+R Web用户Action51Testing软件测试网b,Q8iO w1j ...
- json 转化
1. 把java 对象列表转换为json对象数组,并转为字符串 复制代码代码如下: JSONArray array = JSONArray.fromObject(userlist); S ...
- Xamarin.iOS编译出错
Xamarin.iOS编译出错 错误信息:C:/Program Files(x86)/Reference Assemblies/Microsoft/Framework/Xamarin.iOS/v1.0 ...
- js-DOM2,表单脚本
DOM2: 1.DOM2中:创建一个完整的HTML文档 document.implementation.createHTMLDocument("new Doc"); alert(h ...
- jQuery下操作dropdownlist
dropdownlist呈现到html中如下: <select id="ddlOrg" name="ddlOrg"> <option ...
- Codeforces 467C George and Job(DP)
题目 Source http://codeforces.com/contest/467/problem/C Description The new ITone 6 has been released ...
- ural 2063. Black and White
2063. Black and White Time limit: 1.0 secondMemory limit: 64 MB Let’s play a game. You are given a r ...
- 一个简单的C语言语法检查器的实现
我自己的实现方法的核心过程:首先用一个非终结符代表所有要检查的程序代码,然后根据文法将这个整体的符号不断展开,以拼凑成按检查的程序的顺序排列的终结符序列,能成功说明语法正确,否则有错误. 关键词:分词 ...