从前段时间著名的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>
因篇幅原因,再分一篇
<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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
570次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
531次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
433次阅读
2025-04-18 14:18:38
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
429次阅读
2025-04-08 09:12:48
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
427次阅读
2025-04-22 00:20:37
墨天轮个人数说知识点合集
JiekeXu
427次阅读
2025-04-01 15:56:03
Oracle SQL 执行计划分析与优化指南
Digital Observer
424次阅读
2025-04-01 11:08:44
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
402次阅读
2025-04-22 00:13:51
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
390次阅读
2025-04-20 10:07:02
Oracle 19c RAC更换IP实战,运维必看!
szrsu
363次阅读
2025-04-08 23:57:08
热门文章
移除DataGuard Standby配置导致Primary启动失败
2023-08-17 21292浏览
使用dblink产生的”SELECT /*+ FULL(P) +*/ * FROM XXXXX P ” 解析
2023-06-20 20891浏览
Troubleshooting 'ORA-28041: Authentication protocol internal error' change password 12c R2 DB
2020-04-08 13639浏览
浅谈ORACLE免费数据库Oracle Database XE (Express Edition) 版
2018-10-31 7588浏览
High wait event ‘row cache mutex’ in 12cR2、19c
2020-08-14 5568浏览