• Oracle自定义DES3加解密


    之前有部分数据是在java服务端中进行des3加密,后需要在oracle中直接进行解密,记录以供参考:

    select fun_encrypt_app('123','9OOuLGtKQNkgkhm8MS/mbopUlPQ7vwtD') from dual;
    
    select fun_decrypt_app('f3aaj9ToDFs','9OOuLGtKQNkgkhm8MS/mbopUlPQ7vwtD') from dual;
    

    y7IT9e.png
    y7Iz4S.png
    加密部分:

    CREATE OR REPLACE FUNCTION fun_encrypt_app(
      V_STR        VARCHAR2, V_KEY VARCHAR2) RETURN VARCHAR2 AS V_KEY_RAW RAW(200);
      V_STR_RAW    RAW(2000);
      V_RETURN_STR VARCHAR2(2000);
      V_TYPE       PLS_INTEGER;
    BEGIN
      /*************************************************
        加密函数 FUN_ENCRYPTION 
            入参:
              V_STR 输入明文字符串
              V_KEY 输入密钥字符串,长度为24字节
            返回值:
              V_RETURN_STR 返回密文字符串,约定返回为 16进制密文字符串
            异常处理:
              此函数不对任何异常做捕捉处理,请相应的程序模块对异常做捕捉处理。  
              
            加密方式:
              密钥位数:AES192   DBMS_CRYPTO.ENCRYPT_AES192
              连接方式:CBC      DBMS_CRYPTO.CHAIN_CBC
              填充方式:PKCS5    DBMS_CRYPTO.PAD_PKCS5
        
      **************************************************/
      V_KEY_RAW    := UTL_I18N.STRING_TO_RAW(V_KEY, 'UTF8');
      V_STR_RAW    := UTL_I18N.STRING_TO_RAW(V_STR, 'UTF8');
      -- 指定‘密钥算法’、‘工作模式’、‘填充方式’
      V_TYPE       := DBMS_CRYPTO.ENCRYPT_3DES + DBMS_CRYPTO.CHAIN_ECB +
                      DBMS_CRYPTO.PAD_PKCS5;
      V_STR_RAW    := DBMS_CRYPTO.ENCRYPT(SRC => V_STR_RAW,
                                          TYP => V_TYPE,
                                          KEY => V_KEY_RAW);
      -- V_RETURN_STR := RAWTOHEX(V_STR_RAW);
      V_RETURN_STR :=  utl_raw.cast_to_varchar2(utl_encode.base64_encode(V_STR_RAW));
      -- 过滤加密后生成的 
     和=
      V_RETURN_STR := replace(V_RETURN_STR,'=','');
      RETURN V_RETURN_STR;
    
      /* EXCEPTION
      WHEN OTHERS THEN
      RETURN SQLERRM||SQLCODE ;   */
    END;
    
    

    解密部分

    CREATE OR REPLACE FUNCTION fun_decrypt_app(V_STR VARCHAR2, V_KEY VARCHAR2)
      RETURN VARCHAR2 AS
      V_KEY_RAW    RAW(200);
      V_STR_RAW    RAW(2000);
      V_RETURN_STR VARCHAR2(2000);
      V_TYPE       PLS_INTEGER;
    
    BEGIN
      /************************************************
         解密函数 FUN_DECRYPTION 
            入参:
              V_STR 输入密文字符串,约定密文为16进制字符串
              V_KEY 输入密钥字符串,长度为24字节
            返回值:
              V_RETURN_STR 返回明文字符串   
            异常处理:
              此函数不对任何异常做捕捉处理,请相应的程序模块对异常做捕捉处理。   
            
            加密方式:
              密钥位数:AES192   DBMS_CRYPTO.ENCRYPT_AES192
              连接方式:CBC      DBMS_CRYPTO.CHAIN_CBC
              填充方式:PKCS5    DBMS_CRYPTO.PAD_PKCS5
         
      ***************************************************/
      V_KEY_RAW := UTL_I18N.STRING_TO_RAW(V_KEY, 'UTF8');
      V_STR_RAW := utl_encode.base64_decode(UTL_RAW.CAST_TO_RAW(V_STR));
    -- V_STR_RAW := UTL_RAW.CAST_TO_RAW(V_STR);
      -- 指定‘密钥算法’、‘工作模式’、‘填充方式’
      V_TYPE       := DBMS_CRYPTO.ENCRYPT_3DES + DBMS_CRYPTO.CHAIN_ECB +
                      DBMS_CRYPTO.PAD_PKCS5;
      V_STR_RAW    := DBMS_CRYPTO.DECRYPT(SRC => V_STR_RAW,
                                          TYP => V_TYPE,
                                          KEY => V_KEY_RAW);
      V_RETURN_STR := UTL_I18N.RAW_TO_CHAR(V_STR_RAW, 'UTF8');
      RETURN V_RETURN_STR;
      /*  EXCEPTION
      WHEN OTHERS THEN
      RETURN SQLERRM||SQLCODE ; */
    END;
    
    
  • 相关阅读:
    MyISAM 和InnoDB 区别 转
    beautifulsoup
    爬虫学习
    python操作数据库
    爬虫
    python爬虫
    PHP中“简单工厂模式”实例讲解
    PERL 实现微信登录
    PERL 实现微信登录
    NLS_LANG SIMPLIFIED CHINESE_CHINA.AL32UTF8 和american_america.AL32UTF8
  • 原文地址:https://www.cnblogs.com/SimonHu1993/p/14429884.html
Copyright © 2020-2023  润新知