使用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 ...
随机推荐
- Emacs 之列编辑模式
// */ // ]]> Emacs 之 列编辑模式 Table of Contents 1. Emacs 下列编辑模式常用命令 2. 可以参考 1 Emacs 下列编辑模式常用命令 先mark ...
- java测试时常见的一些错误
1.解决警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' http://blo ...
- C# 枚举(enum)
public enum EnumStatus { On=0, Off=1 } //获取值:0 Convert.ToInt32(EnumStatus.On); //获取On EnumStatus.On; ...
- 移动Web开发规范
1.字体设置 使用无衬线字体 body { font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif; } 2.设 ...
- poj 1321 棋盘问题
八皇后问题变形,回溯法. #include <cstdio> #include <cstring> #include <iostream> using namesp ...
- 2016.8.21 JavaScript 入门
1.JavaScript的数据类型: ①undefined ②null ③boolean ④string ⑤symbol ⑥number, object 2.在JavaScript中所有的变量和 ...
- Android开发环境搭建全程演示(jdk+eclipse+android sdk)
全程演示android开发环境的搭建过程,无需配置环境变量.所有软件都是写该文章时最新版本 一 相关下载 (1) java JDK下载: 进入该网页: http://java.sun.com/java ...
- Docker安装RStudio
在我前一篇文章中已讲述了如何在Windows中安装和配置Docker,本文则讲述如何在docker中安装rstudio! 1.Docker的使用 1.1查看指定machine的IP 打开Docker ...
- BZOJ4444 : [Scoi2015]国旗计划
首先将坐标离散化,因为区间互不包含,可以理解为对于每个起点输出最少需要多少个战士. 将环倍长,破环成链,设$f[i]$表示区间左端点不超过$i$时右端点的最大值,可以通过$O(n)$递推求出. 那么如 ...
- hibernate.cfg.xml配置文件和hbm.xml配置文件
http://blog.sina.com.cn/s/blog_a7b8ab2801014m0e.html hibernate.cfg.xml配置文件格式 <?xml version=" ...