MRa*_*ser 3 sql oracle encryption plsql ora-06553
怎么正确打电话DBMS_OBFUSCATION_TOOLKIT.DESEncrypt?(如果可能,不使用PL/SQL)
select DBMS_OBFUSCATION_TOOLKIT.DESEncrypt('x','y') from dual;
Run Code Online (Sandbox Code Playgroud)
因为DESEncrypt超载而无效:
ORA-06553: PLS-307: Too many declarations of "DESENCRYPT" match this call
06553. 00000 - "PLS-%s: %s"
*Cause:
*Action:
Run Code Online (Sandbox Code Playgroud)
有没有办法选择DESENCRYPT的一个实现(可能是VARCHAR2变体)来避免这个错误?
在Oracle 11G中,您可以使用这样的命名表示法:
select DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(input_string=>'x',key_string=>'y')
from dual;
Run Code Online (Sandbox Code Playgroud)
我不认为可以在早期版本的Oracle中明确地调用这些函数,除非创建一个包装函数并调用它.
在这里,让它通过提供param名称让它知道使用哪个重载!
select DBMS_OBFUSCATION_TOOLKIT.DesEncrypt(INPUT_STRING=>'11112abc',KEY_STRING=>'4578ccde')
from dual ;
Run Code Online (Sandbox Code Playgroud)
回报
M5w5Z
请注意,您的密钥至少需要8个字节:
ORA-28234:密钥长度太短ORA-06512:在"SYS.DBMS_OBFUSCATION_TOOLKIT_FFI",第21行ORA-06512:在"SYS.DBMS_OBFUSCATION_TOOLKIT",第126行28234. 00000 - "密钥长度太短"*原因:指定的密钥算法太短了.DES需要至少8个字节的密钥.三重DES在双键模式下需要至少16字节的密钥,在三键模式下需要24字节.*操作:指定更长的密钥.
你总是可以尝试使用包装函数(如tony所示)
create or replace
function DesEncrypt(pinputString IN VARCHAR2 , pKeyString in VARCHAR2) RETURN varchar2
IS
BEGIN
return DBMS_OBFUSCATION_TOOLKIT.DesEncrypt(INPUT_STRING=>INPUTSTRING,KEY_STRING=>KEYSTRING);
END DesEncrypt;
/
select DesEncrypt('11112abc' , '4578ccde') from dual ;
Run Code Online (Sandbox Code Playgroud)
由于您使用的是10g,因此您可能需要使用DBMS_CRYPTO软件包 http://www.stanford.edu/dept/itss/docs/oracle/10g/network.101/b10773/apdvncrp.htm
| 归档时间: |
|
| 查看次数: |
7167 次 |
| 最近记录: |