对于业务系统中常见的需要加密的列我们可以在应用层来实现,也可以在数据库层实现,
自己验证了一下使用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包加密关键列数据的更多相关文章

  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. .NET C# Tostring() format 格式化字符串大全

    C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...

  2. Understanding, Operating and Monitoring Apache Kafka

    Apache Kafka is an attractive service because it's conceptually simple and powerful. It's easy to un ...

  3. Sublime text追踪函数插件:ctags

    转自:http://blog.csdn.net/xxhsu/article/details/30766675 一.下载: 1)http://ctags.sourceforge.net/ 2)http: ...

  4. SpringJDBC解析1-使用示例

    JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组 ...

  5. express-8 Handlebars模板引擎(1)

    简介 使用JavaScript生成一些HTML document.write('<h1>Please Don\'t Do This</h1>'); document.write ...

  6. mac下mysql的安装

    由于最近需要布置mantis用来进行bug追踪,在此记录其过程. 由于PHP apache环境在Mac OS上是自带的,所以不需要另处下安装包,只需要简单配置一下即可. 首先打开终端输入命令: sud ...

  7. Xamarin Android教程如何使用Xamarin开发Android应用

    Xamarin Android教程如何使用Xamarin开发Android应用 在了解了Xamarin和Andriod系统之后,下面我们需要了解一下如何使用这些工具和系统来开发我们的应用程序. And ...

  8. idea 使用

    1.idea对maven的兼容性优于eclipse,idea对于程序内部管理是模块,个人感觉也是优于eclipse. 2.idea默认设置编辑器字体是比较差的. 可以参考文章 http://www.3 ...

  9. js不间断平滑地自动向上滚动

    <html> <head> <title>scroll up auto smooth</title> <style> *{ margin: ...

  10. [TJOI2016&HEOI2016]

    很有意思.是因为排序那道题才听闻今年tjoi2016的. 题是好题!先把它刷完再去把zhihu look through一遍. bzoj4552 以后看到什么做不出的题,看看能否写二分!!!!写二分! ...