DBMS_Crypto.encrypt() 等同于 DBMS_Obfuscation_Toolkit.DES3Encrypt() 是什么?
What is the DBMS_Crypto.encrypt() equivalent of DBMS_Obfuscation_Toolkit.DES3Encrypt()?
我正在编辑一些包含 DBMS_Obfuscation_Toolkit 引用的 Oracle 代码。我读到 the DBMS_Obfuscation_Toolkit package is de-supported as of Oracle 10.2,我应该升级我的代码,而不是使用 DMBS_Crypto。
我有这个代码...
dbms_obfuscation_toolkit.DES3Encrypt(
input => UTL_I18N.STRING_TO_RAW(v_input, 'AL32UTF8'),
key => UTL_I18N.STRING_TO_RAW(v_key, 'AL32UTF8'),
encrypted_data => v_temp_raw
);
--039053190040155118183231113102022222017082162099111241054160152245207112101203096142122226097245
v_temp := UTL_RAW.CAST_TO_VARCHAR2(v_temp_raw);
...期望长度 v_input 可以被 8 整除,并产生 96 个字符的结果(“039053...”)。
The DBMS_Obfuscation_Toolkit documentation 说“Oracle 的 3DES 实现”默认为 2 密钥实现,“在外部密码块链接 (CBC) 模式下”。但是当我试图写一个 DBMS_Crypto.encrypt()
等价物时...
--050127133161074179059208056044163133102098061207107114089045105193049199029095204025170130139068
v_temp := UTL_RAW.CAST_TO_VARCHAR2(
DBMS_Crypto.encrypt(
src => UTL_I18N.STRING_TO_RAW(v_input, 'AL32UTF8'), -- Cleartext
typ => DBMS_Crypto.ENCRYPT_3DES_2key + DBMS_Crypto.CHAIN_CBC + DBMS_Crypto.PAD_NONE,
key => UTL_I18N.STRING_TO_RAW(v_key, 'AL32UTF8') -- Key
)
);
...我得到了不同的 96 个字符结果(“050127...”)。
为了上述目的,v_input('Trees sway into 25MPH winds! ')和v_key('Whosebug123456PSRV235KGNKNVEFHEF3404757543MNVOVCNALADNC6579')是相同的。
要获得与 DBMS_Crypto.encrypt()
相同的结果,我应该传递哪些参数? DBMS_Crypto.encrypt() 等同于 DBMS_Obfuscation_Toolkit.DES3Encrypt() 是什么?
您需要提供匹配的初始化向量 (IV)。如果没有原始IV,则使用DBMS_CRYPTO.LEGACY_DEFAULT_IV = 0123456789ABCDEF
:
declare
v_input char(32) :=
'Trees sway into 25MPH winds! ';
v_temp_raw raw(32);
v_key varchar2(64) :=
'Whosebug123456PSRV235KGNKNVEFHEF3404757543MNVOVCNALADNC6579';
begin
sys.dbms_obfuscation_toolkit.DES3Encrypt(
input => UTL_I18N.STRING_TO_RAW ( v_input, 'AL32UTF8' ),
key => UTL_I18N.STRING_TO_RAW ( v_key, 'AL32UTF8' ),
encrypted_data => v_temp_raw
);
dbms_output.put_line ( v_temp_raw );
v_temp_raw := sys.DBMS_Crypto.encrypt (
src => UTL_I18N.STRING_TO_RAW ( v_input , 'AL32UTF8' ),
typ => DBMS_Crypto.ENCRYPT_3DES_2key + DBMS_Crypto.CHAIN_CBC + DBMS_Crypto.PAD_NONE,
key => UTL_I18N.STRING_TO_RAW ( v_key , 'AL32UTF8' ),
iv => hextoraw ( '0123456789ABCDEF' )
);
dbms_output.put_line ( v_temp_raw );
end;
/
2735BE289B76B7E7716616DE1152A2636FF136A098F5CF7065CB608E7AE261F5
2735BE289B76B7E7716616DE1152A2636FF136A098F5CF7065CB608E7AE261F5
我正在编辑一些包含 DBMS_Obfuscation_Toolkit 引用的 Oracle 代码。我读到 the DBMS_Obfuscation_Toolkit package is de-supported as of Oracle 10.2,我应该升级我的代码,而不是使用 DMBS_Crypto。
我有这个代码...
dbms_obfuscation_toolkit.DES3Encrypt(
input => UTL_I18N.STRING_TO_RAW(v_input, 'AL32UTF8'),
key => UTL_I18N.STRING_TO_RAW(v_key, 'AL32UTF8'),
encrypted_data => v_temp_raw
);
--039053190040155118183231113102022222017082162099111241054160152245207112101203096142122226097245
v_temp := UTL_RAW.CAST_TO_VARCHAR2(v_temp_raw);
...期望长度 v_input 可以被 8 整除,并产生 96 个字符的结果(“039053...”)。
The DBMS_Obfuscation_Toolkit documentation 说“Oracle 的 3DES 实现”默认为 2 密钥实现,“在外部密码块链接 (CBC) 模式下”。但是当我试图写一个 DBMS_Crypto.encrypt()
等价物时...
--050127133161074179059208056044163133102098061207107114089045105193049199029095204025170130139068
v_temp := UTL_RAW.CAST_TO_VARCHAR2(
DBMS_Crypto.encrypt(
src => UTL_I18N.STRING_TO_RAW(v_input, 'AL32UTF8'), -- Cleartext
typ => DBMS_Crypto.ENCRYPT_3DES_2key + DBMS_Crypto.CHAIN_CBC + DBMS_Crypto.PAD_NONE,
key => UTL_I18N.STRING_TO_RAW(v_key, 'AL32UTF8') -- Key
)
);
...我得到了不同的 96 个字符结果(“050127...”)。
为了上述目的,v_input('Trees sway into 25MPH winds! ')和v_key('Whosebug123456PSRV235KGNKNVEFHEF3404757543MNVOVCNALADNC6579')是相同的。
要获得与 DBMS_Crypto.encrypt()
相同的结果,我应该传递哪些参数? DBMS_Crypto.encrypt() 等同于 DBMS_Obfuscation_Toolkit.DES3Encrypt() 是什么?
您需要提供匹配的初始化向量 (IV)。如果没有原始IV,则使用DBMS_CRYPTO.LEGACY_DEFAULT_IV = 0123456789ABCDEF
:
declare
v_input char(32) :=
'Trees sway into 25MPH winds! ';
v_temp_raw raw(32);
v_key varchar2(64) :=
'Whosebug123456PSRV235KGNKNVEFHEF3404757543MNVOVCNALADNC6579';
begin
sys.dbms_obfuscation_toolkit.DES3Encrypt(
input => UTL_I18N.STRING_TO_RAW ( v_input, 'AL32UTF8' ),
key => UTL_I18N.STRING_TO_RAW ( v_key, 'AL32UTF8' ),
encrypted_data => v_temp_raw
);
dbms_output.put_line ( v_temp_raw );
v_temp_raw := sys.DBMS_Crypto.encrypt (
src => UTL_I18N.STRING_TO_RAW ( v_input , 'AL32UTF8' ),
typ => DBMS_Crypto.ENCRYPT_3DES_2key + DBMS_Crypto.CHAIN_CBC + DBMS_Crypto.PAD_NONE,
key => UTL_I18N.STRING_TO_RAW ( v_key , 'AL32UTF8' ),
iv => hextoraw ( '0123456789ABCDEF' )
);
dbms_output.put_line ( v_temp_raw );
end;
/
2735BE289B76B7E7716616DE1152A2636FF136A098F5CF7065CB608E7AE261F5
2735BE289B76B7E7716616DE1152A2636FF136A098F5CF7065CB608E7AE261F5