首页 » ORACLE 9i-23ai » oracle 9i 的加密解密用法之dbms_obfuscation_toolkit(一)

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

从前段时间著名的CSDN的600W用户密码泄漏事件,再到天涯社区的4000w万用户,使用户对网站的信誉失去了信心,我记的常用的最早的技术社区就是CSDN,应该那时还是XML 格式化后的页面,相信最近各网站都在做软件上的升级,明文密码决不可取,可以自己写也可以用数据库特性的加密用法不过后者有数据库版本升级灵活性限制。

测试一下9I的加密用法dbms_obfuscation_toolkit package

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  /

函数已创建。

因篇幅原因,再分一篇

打赏

对不起,这篇文章暂时关闭评论。