暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle 9i 的加密解密用法之dbms_obfuscation_toolkit(一)

原创 Anbob 2011-12-27
1096
从前段时间著名的CSDN的600W用户密码泄漏事件,再到天涯社区的4000w万用户,使用户对网站的信誉失去了信心,我记的常用的最早的技术社区就是CSDN,应该那时还是XML 格式化后的页面,相信最近各网站都在做软件上的升级,明文密码决不可取,可以自己写也可以用数据库特性的加密用法不过后者有数据库版本升级灵活性限制。
<p>测试一下9I的加密用法dbms_obfuscation_toolkit package</p>
<pre>
DES 加密解密
dbms_obfuscation_toolkit.desencrypt
dbms_obfuscation_toolkit.desdecrypt
SQL> l
1  create or replace function encrypt(p_in varchar2,p_key varchar2) return varchar2
2  is
3  begin
4  return utl_raw.cast_to_raw(dbms_obfuscation_toolkit.desencrypt(input_string=>p_in,key_string=>p_key));
5* end;
SQL> /
函数已创建。
SQL> select encrypt('123456','mark') from dual;
select encrypt('123456','mark') from dual
*
ERROR 位于第 1 行:
ORA-28232: obfuscation 工具箱的输入长度无效
ORA-06512: 在"SYS.DBMS_OBFUSCATION_TOOLKIT_FFI", line 0
ORA-06512: 在"SYS.DBMS_OBFUSCATION_TOOLKIT", line 126
ORA-06512: 在"SYS.ENCRYPT", line 4

[oracle@anbob ~]$ oerr ora 28232
28232, 0000, "invalid input length for obfuscation toolkit"
// *Cause:  Length of data submitted for encryption or decryption is not a
//          multiple of 8 bytes.
// *Action: Make sure that the length of the data to be encrypted or decrypted
//          is a multiple of 8 bytes.

SQL> select encrypt('12345678','mark') from dual;
select encrypt('12345678','mark') from dual
*
ERROR 位于第 1 行:
ORA-28234: 密钥长度太短
ORA-06512: 在"SYS.DBMS_OBFUSCATION_TOOLKIT_FFI", line 0
ORA-06512: 在"SYS.DBMS_OBFUSCATION_TOOLKIT", line 126
ORA-06512: 在"SYS.ENCRYPT", line 4

SQL> select encrypt('123456','mark1234') from dual;
select encrypt('123456','mark1234') from dual
*
ERROR 位于第 1 行:
ORA-28232: obfuscation 工具箱的输入长度无效
ORA-06512: 在"SYS.DBMS_OBFUSCATION_TOOLKIT_FFI", line 0
ORA-06512: 在"SYS.DBMS_OBFUSCATION_TOOLKIT", line 126
ORA-06512: 在"SYS.ENCRYPT", line 4

SQL> select encrypt('12345678','mark12340') from dual;
ENCRYPT('12345678','MARK12340')
--------------------------------------------------------------------------------
3B11A43ED856AE79

SQL> select encrypt('123456781','mark123400') from dual;
select encrypt('123456781','mark123400') from dual
*
ERROR 位于第 1 行:
ORA-28232: obfuscation 工具箱的输入长度无效
ORA-06512: 在"SYS.DBMS_OBFUSCATION_TOOLKIT_FFI", line 0
ORA-06512: 在"SYS.DBMS_OBFUSCATION_TOOLKIT", line 126
ORA-06512: 在"SYS.ENCRYPT", line 4

SQL> select encrypt('1234567812345678','mark123400') from dual;
ENCRYPT('1234567812345678','MARK123400')
--------------------------------------------------------------------------------
3B11A43ED856AE79BD5AC85D2541690A

修改后:
SQL> create or replace function encrypt(p_in varchar2,p_key varchar2) return varchar2
is
v_in varchar2(255);
v_rtn varchar2(1000);
begin
v_in := rpad(p_in,(trunc(length(p_in)/8)+1)*8,chr(0));
dbms_obfuscation_toolkit.desencrypt(input_string=>v_in,key_string=>p_key,encrypted_string=>v_rtn);
return v_rtn;
end;
/
函数已创建。

SQL> create or replace function decrypt(p_in varchar2,p_key varchar2) return varchar2
2  is
3  v_in varchar2(2000);
4  begin
5     dbms_obfuscation_toolkit.DESDECRYPT(input_string => p_in,key_string => p_key,
6    decrypted_string=> v_in);
7    v_in := rtrim(v_in,chr(0));
8    return v_in;
9  end;
10  /
函数已创建。
</pre>
因篇幅原因,再分一篇
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论