接着上一篇,继续
Error Code Reason
28827 The specified cipher suite is not defined
28829 No value has been specified for the cipher suite to be used
28233 Source data was previously encrypted
28234 DES: Specified key size too short. DES keys must be at least 8 bytes (64 bits).
AES: Specified key size is not supported. AES keys must be 128, 192, or 256 bits
28239 The encryption key has not been specified or contains a NULL value
我们继续用前面测试9I加密时的方法
tip:
可以正常加密码与解密了,但解密RETURN 还是raw databype,再转一下
Error Code Reason
28827 The specified cipher suite is not defined
28829 No value has been specified for the cipher suite to be used
28233 Source data was previously encrypted
28234 DES: Specified key size too short. DES keys must be at least 8 bytes (64 bits).
AES: Specified key size is not supported. AES keys must be 128, 192, or 256 bits
28239 The encryption key has not been specified or contains a NULL value
我们继续用前面测试9I加密时的方法
SQL> desc anbob.testcrypt
Name Null? Type
-----------------------------------------------------------------------------------
ID NUMBER(38)
PASSWD VARCHAR2(100)
ENCRYPTED VARCHAR2(1000)
SQL> select * from anbob.testcrypt;
ID PASSWD ENCRYPTED
---------- ------------------------------ --------------------------------------------------
1 123456 遞:朋\\
2 123456ab! t+鷏Sa廿
SQL> update anbob.testcrypt set encrypted=pkg_secure.encrypt(utl_raw.cast_to_raw(passwd));
update anbob.testcrypt set encrypted=pkg_secure.encrypt(utl_raw.cast_to_raw(passwd))
*
ERROR at line 1:
ORA-28239: no key provided
ORA-06512: at "SYS.DBMS_CRYPTO_FFI", line 3
ORA-06512: at "SYS.DBMS_CRYPTO", line 10
ORA-06512: at "SYS.PKG_SECURE", line 6
--好28239错误,说明在KEY上,注意key 与 传入的数据必须为RAW,我们转换一下,转换用utl_i18n包或utl_raw都可以
SQL> l
1 CREATE OR REPLACE PACKAGE pkg_secure
2 IS
3 typ PLS_INTEGER :=DBMS_CRYPTO.ENCRYPT_AES256
4 +DBMS_CRYPTO.CHAIN_CBC
5 +DBMS_CRYPTO.PAD_PKCS5;
6 key CONSTANT RAW(32) :=utl_raw.cast_to_raw('mark1234');
7 FUNCTION encrypt(input RAW) RETURN RAW;
8 FUNCTION decrypt(encry_str RAW) RETURN RAW;
9* END;
SQL> select pkg_secure.encrypt(utl_i18n.string_to_raw('hello serapy ! ')) from dual;
select pkg_secure.encrypt(utl_i18n.string_to_raw('hello serapy ! ')) from dual
*
ERROR at line 1:
ORA-28234: key length too short
ORA-06512: at "SYS.DBMS_CRYPTO_FFI", line 3
ORA-06512: at "SYS.DBMS_CRYPTO", line 10
ORA-06512: at "SYS.PKG_SECURE", line 6
--再查询遇到了28234错误,看上面的提示,AES keys must be 128, 192, or 256 bits复制
SQL> select dbms_crypto.randombytes(128/8) from dual;
DBMS_CRYPTO.RANDOMBYTES(128/8)
-----------------------------------------------
4BBAC145F4B6EA4D12A524BE181AB1A5
SQL> l
1 CREATE OR REPLACE PACKAGE pkg_secure
2 IS
3 typ PLS_INTEGER :=DBMS_CRYPTO.ENCRYPT_AES256
4 +DBMS_CRYPTO.CHAIN_CBC
5 +DBMS_CRYPTO.PAD_PKCS5;
6 key CONSTANT RAW(128) :=utl_raw.cast_to_raw('4BBAC145F4B6EA4D12A524BE181AB1A5');
7 FUNCTION encrypt(input RAW) RETURN RAW;
8 FUNCTION decrypt(encry_str RAW) RETURN RAW;
9* END;
SQL> update anbob.testcrypt set encrypted=pkg_secure.encrypt(utl_raw.cast_to_raw(passwd));
2 rows updated.
SQL> select * from anbob.testcrypt;
ID PASSWD ENCRYPTED
---------- ------------------------------ --------------------------------------------------
1 123456 8C0A2C572DAC84D6E02024AE14DA869D
2 123456ab! EB648BD238CE4D34795118BFA4569884
SQL> select id,passwd,pkg_secure.decrypt(encrypted) decrypted from anbob.testcrypt;
ID PASSWD DECRYPTED
---------- ------------------------------ ------------------------------
1 123456 313233343536
2 123456ab! 313233343536616221复制
tip:
可以正常加密码与解密了,但解密RETURN 还是raw databype,再转一下
SQL> select id,passwd,utl_raw.cast_to_varchar2(pkg_secure.decrypt(encrypted)) decrypted from anbob.testcrypt;
ID PASSWD DECRYPTED
---------- ------------------------------ ------------------------------
1 123456 123456
2 123456ab! 123456ab!
--解密成功
SQL>l
1 CREATE OR REPLACE PACKAGE pkg_secure
2 IS
3 typ PLS_INTEGER :=dbms_crypto.DES_CBC_PKCS5;
4 key CONSTANT RAW(128) :=utl_raw.cast_to_raw('MARK1234');
5 FUNCTION encrypt(input RAW) RETURN RAW;
6 FUNCTION decrypt(encry_str RAW) RETURN RAW;
7* END;
--这样也是可以的,只是typ 成了一个组合套装,
SQL> select pkg_secure.encrypt(utl_raw.cast_to_raw(passwd)) from anbob.testcrypt;
PKG_SECURE.ENCRYPT(UTL_RAW.CAST_TO_RAW(PASSWD))
---------------------------------------------------------------
EADCCC1D9C19BFEA
D83D13029E7D8CA408F44196F15AAD06
SQL> select passwd,utl_raw.cast_to_varchar2(pkg_secure.decrypt(pkg_secure.encrypt(utl_raw.cast_to_raw(passwd)))) decrypted from anbob.testcrypt;
PASSWD DECRYPTED
------------------------------ ------------------------------
123456 123456
123456ab! 123456ab!复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
652次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
624次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
527次阅读
2025-04-20 10:07:02
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
522次阅读
2025-04-08 09:12:48
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
479次阅读
2025-04-22 00:20:37
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
475次阅读
2025-04-17 17:02:24
Oracle 19c RAC更换IP实战,运维必看!
szrsu
455次阅读
2025-04-08 23:57:08
一页概览:Oracle GoldenGate
甲骨文云技术
454次阅读
2025-04-30 12:17:56
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
449次阅读
2025-04-22 00:13:51
火焰图--分析复杂SQL执行计划的利器
听见风的声音
401次阅读
2025-04-17 09:30:30
热门文章
移除DataGuard Standby配置导致Primary启动失败
2023-08-17 21335浏览
使用dblink产生的”SELECT /*+ FULL(P) +*/ * FROM XXXXX P ” 解析
2023-06-20 20902浏览
Troubleshooting 'ORA-28041: Authentication protocol internal error' change password 12c R2 DB
2020-04-08 13689浏览
浅谈ORACLE免费数据库Oracle Database XE (Express Edition) 版
2018-10-31 7656浏览
High wait event ‘row cache mutex’ in 12cR2、19c
2020-08-14 5602浏览