ORA-28234:在 Oracle 中进行 AES 加密时密钥长度太短



我正在尝试在Oracle中进行AES加密并得到ORA-28234: key length too short错误。

但是,根据我的说法,密钥的长度是 32 并且是正确的。

select length('���(Df�%{�O�e�M5���� ���M�') from dual;

输出:

32

我已经在pythonpostgres中尝试了使用相同的密钥进行AES加密,并且工作正常。

请指教。

Oracle AES 匿名块:

declare
l_mod number;
enc_val raw(2000);
begin
l_mod:= dbms_crypto.ENCRYPT_AES + dbms_crypto.CHAIN_CBC+ dbms_crypto.AES_CBC_PKCS5;
enc_val := dbms_crypto.encrypt(UTL_I18N.STRING_TO_RAW ('test',  'AL32UTF8'),l_mod,UTL_RAW.CAST_TO_RAW ('���(Df�%{�O�e�M5���� ���M�'));
DBMS_OUTPUT.PUT_LINE('enc_val='||enc_val);
end;

输出:

Error report -
ORA-28234: key length too short
ORA-06512: at "SYS.DBMS_CRYPTO_FFI", line 3
ORA-06512: at "SYS.DBMS_CRYPTO", line 13
ORA-06512: at line 6
28234. 00000 -  "key length too short"
*Cause:    The key specified is too short for the algorithm. DES
requires a key of at least 8 bytes. Triple DES requires a
key of least 16 bytes in two-key mode and 24 bytes in three-key
mode.
*Action:   Specify a longer key.

根据 Python 和 Oracle 中的 Base 64 解码,代码应该是这样的:

DECLARE
l_mod NUMBER;
enc_val RAW(2000);
KEY VARCHAR2(80) := 'rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw=';
BEGIN
l_mod:= DBMS_CRYPTO.ENCRYPT_AES + DBMS_CRYPTO.CHAIN_CBC+ DBMS_CRYPTO.AES_CBC_PKCS5;
enc_val := DBMS_CRYPTO.ENCRYPT(UTL_I18N.STRING_TO_RAW('test',  'AL32UTF8'), l_mod, UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(KEY)) );
DBMS_OUTPUT.PUT_LINE('enc_val = '||enc_val);
END;

最新更新