首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DBMS_Crypto.encrypt()等价于DBMS_Obfuscation_Toolkit.DES3Encrypt()是什么?

DBMS_Crypto.encrypt()等价于DBMS_Obfuscation_Toolkit.DES3Encrypt()是什么?
EN

Stack Overflow用户
提问于 2022-05-09 19:39:29
回答 1查看 288关注 0票数 4

我正在编辑一些包含DBMS_Obfuscation_Toolkit引用的Oracle代码。我读过那个工具包包在Oracle 10.2中不受支持。,我应该升级我的代码,而不是使用DMBS_Crypto。

我有这个密码..。

代码语言:javascript
复制
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);

...which期望长度v_input可以被8整除,并产生96个字符的结果(“039053.”)。

工具包文档说,“甲骨文的3 3DES实现”默认为2键实现,“在外部密码-分组链接(CBC)模式”。但当我试图写一个DBMS_Crypto.encrypt()等价物时..。

代码语言:javascript
复制
    --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
            )
        );

...I得到一个不同的96个字符结果(“050127.”)。

为了达到上述目的,v_input (“树木摇曳成25英里每小时的风!”)('STACKOVERFLOW123456PSRV235KGNKNVEFHEF3404757543MNVOVCNALADNC6579')和v_key是一样的。

要获得与DBMS_Obfuscation_Toolkit.DES3Encrypt()?相同的结果,我应该传递哪些参数?-- DBMS_Crypto.encrypt()等效于DBMS_Crypto.encrypt

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-12 15:13:57

您需要提供一个匹配的初始化向量(IV)。如果没有原始IV,那么使用DBMS_CRYPTO.LEGACY_DEFAULT_IV = 0123456789ABCDEF

代码语言:javascript
复制
declare
  v_input    char(32) := 
    'Trees sway into 25MPH winds! ';
  v_temp_raw raw(32);
  v_key      varchar2(64) := 
    'STACKOVERFLOW123456PSRV235KGNKNVEFHEF3404757543MNVOVCNALADNC6579';
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72177401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档