对于业务系统中常见的需要加密的列我们可以在应用层来实现,也可以在数据库层实现,
自己验证了一下使用dbms_crypto包来封装函数实现关键列的加密。

1.数据库版本

  1. SQL> select * from v$version;
  2.  
  3. BANNER
  4. ----------------------------------------------------------------
  5. Oracle Database 10g Enterprise Edition Release 10.2.0.4. - Prod
  6. PL/SQL Release 10.2.0.4. - Production
  7. CORE 10.2.0.4. Production
  8. TNS for Linux: Version 10.2.0.4. - Production
  9. NLSRTL Version 10.2.0.4. - Production

2.创建加密函数

  1. SQL> conn /as sysdba
  2. Connected.
  3. SQL> create or replace function fun_enable_crypto(v_str varchar2,
  4. v_key varchar2 default 'abcdefgh')
  5. return raw
  6. is
  7. --v_str_raw raw():=utl_raw.cast_to_raw(v_str);
  8. v_str_raw raw():=utl_i18n.string_to_raw(v_str,'AL32UTF8');
  9. v_key_raw raw():=utl_i18n.string_to_raw(v_key,'AL32UTF8');
  10. result_crypto raw();
  11. begin
  12. result_crypto:=dbms_crypto.encrypt(src=>v_str_raw,
  13. typ=>dbms_crypto.DES_CBC_PKCS5,
  14. key=>v_key_raw);
  15. return result_crypto;
  16. end;
  17. /
  18.  
  19. Function created.

3.创建解密函数

  1. SQL> create or replace function fun_disable_crypto(encrypto raw,
  2. v_key varchar2 default 'abcdefgh')
  3. return varchar2
  4. is
  5. v_key_raw raw():=utl_i18n.string_to_raw(v_key,'AL32UTF8');
  6. result_crypto raw();
  7. begin
  8. result_crypto:=dbms_crypto.decrypt(src => encrypto,
  9. typ => dbms_crypto.DES_CBC_PKCS5,
  10. key=>v_key_raw);
  11. return utl_i18n.raw_to_char(result_crypto,'AL32UTF8');
  12. end;
  13. /
  14.  
  15. Function created.

3.验证加密解密

  1. SQL> select fun_enable_crypto('中国.北京.海淀') as crypto_info from dual;
  2.  
  3. CRYPTO_INFO
  4. --------------------------------------------------------------------------------
  5. 60E37C977B92E7C4F36FEF2BFEC55494CF57A8DB9F10FEB0
  6.  
  7. SQL> select fun_disable_crypto('60E37C977B92E7C4F36FEF2BFEC55494CF57A8DB9F10FEB0') as rel_info from dual;
  8.  
  9. REL_INFO
  10. --------------------------------------------------------------------------------
  11. 中国.北京.海淀

--自定义一个key

  1. SQL> select fun_enable_crypto('中国.北京.海淀','1drQdse5Nw') as crypto_info from dual;
  2.  
  3. CRYPTO_INFO
  4. --------------------------------------------------------------------------------
  5. D0FD950EAF47B20E331500444FD8D1090ECB7EF519750BAF
  6.  
  7. SQL> select fun_disable_crypto('D0FD950EAF47B20E331500444FD8D1090ECB7EF519750BAF','1drQdse5Nw')
  8. as rel_info from dual;
  9.  
  10. REL_INFO
  11. --------------------------------------------------------------------------------
  12. 中国.北京.海淀

参考:

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包加密关键列数据的更多相关文章

  1. VLOOKUP和MATCH嵌套以高效引用多列数据

    VLOOKUP函数在日常工作中十分常见,以至于你要是没用过VLOOKUP函数,你都不好意思说你懂EXCEL. 一般情况下,我们需要在源数据中查找某个指定列的数据,就会用到VLOOKUP函数(如果是指定 ...

  2. Oracle 列数据聚合方法汇总

    网上流传众多列数据聚合方法,现将各方法整理汇总,以做备忘. wm_concat 该方法来自wmsys下的wm_concat函数,属于Oracle内部函数,返回值类型varchar2,最大字符数4000 ...

  3. c# 如何中List<object>中去掉object对象中的重复列数据?

    //去掉重复 var title = modelList.GroupBy(m => m.Title.ToLower().Trim()).Select(m => new { ID = m.F ...

  4. 视图合并、hash join连接列数据分布不均匀引发的惨案

    表大小 SQL> select count(*) from agent.TB_AGENT_INFO; COUNT(*) ---------- 1751 SQL> select count( ...

  5. pentaho cde 选择性的显示多列数据

    在业务需求中,有时候会有这种需要,就是查出来可多列数据,而我只想画出来其中的一列或者说某一列,而pentaho会默认画出查出来的所有数据,而不断的更改数据源又太麻烦,这时就要用到resders方法了. ...

  6. 一个通用的DataGridView导出Excel扩展方法(支持列数据格式化)

    假如数据库表中某个字段存放的值“1”和“0”分别代表“是”和“否”,要在DataGridView中显示“是”和“否”,一般用两种方法,一种是在sql中直接判断获取,另一种是在DataGridView的 ...

  7. Jqgrid入门-Jqgrid列数据拖动(七)

    上一章提到在Jqgrid中如何设置二级表头,这一章节主要探讨Jqgrid表格里面的数据如果实现拖动功能,比如你想把第一行的数据拖到当前页的最后一行,或者其他位置.     Jqgrid表格插件自己没有 ...

  8. EXTJS4.2 控件之Grid 根据数据源某列数据不同绑定不同的控件setEditor

    Grid 根据数据源某列数据不同绑定不同的控件,例如:文本框和下拉框 主要代码写在grid的  plugins: [rowEditing],下面这是定义的rowEditing对象,这里面的要定义成 E ...

  9. SQL列数据转换为字符串

    行列转换,将列数据转换为字符串输出 ) SET @center_JZHW = ( SELECT DISTINCT STUFF( ( SELECT ',' + ce_code FROM ap_cente ...

随机推荐

  1. Linux3.18.6内核添加系统调用(32位系统)

    1.将已经下载好的内核解压,我的目录是 /home/shangsongchao/LinuxKernel/testlinux-3.18.6/linux-3.18.6 2.添加系统调用表: 在/home/ ...

  2. FastDFS简介

    一.FastDFS概述: FastDFS是一个开源的轻量级分布式文件系统,他对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.下载)等,解决了大容量存储和负载均衡的问题,高度追求高性能 ...

  3. KMP模式匹配算法

    KMP模式匹配算法 相信很多人对于这个还有点不了解,或者说是不懂,下面,通过一道题,来解决软考中的这个问题! 正题: aaabaaa,其next函数值为多少? 对于这个问题,我们应该怎么做呢? 1.整 ...

  4. document.body.scrollTop

    标准浏览器:document.documentElement.scrollTop; 谷歌浏览器:document.body.scrollTop; var scrollTop = document.do ...

  5. 【转】Linux IO实时监控iostat命令详解

    转自:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858810.html 简介 iostat主要用于监控系统设备的IO负载情况,iosta ...

  6. 图解LoadAverage(负载)

    图解LoadAverage(负载) http://www.habadog.com/2015/02/27/what-is-load-average/   一.什么是Load Average 系统负载(S ...

  7. 《DSP using MATLAB》示例Example4.6

    用到的z变换的性质: 继续解题: 上代码: b = [0,0,0, 0.25, -0.5, 0.0625]; a = [1, -1, 0.75, -0.25, 0.0625]; % polynomia ...

  8. 20145223《Java程序程序设计》课程总结

    20145223<Java程序程序设计>课程总结 每周读书笔记链接汇总 第一周学习总结 第二周学习总结 第三周学习总结 第四周学习总结 第五周学习总结 第六周学习总结 第七周学习总结 第八 ...

  9. 8611 大牛之路I

    时间限制:500MS  内存限制:1000K 提交次数:157 通过次数:62 题型: 编程题   语言: C++;C Description 要成为ACM大牛,要掌握很多必需的知识点.某些知识点可以 ...

  10. jdbc 各驱动写法

    1.Oracle8/8i/9i数据库(thin模式) Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); ...