zoukankan      html  css  js  c++  java
  • 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;
    
    
  • 相关阅读:
    6-8 Percolate Up and Down (20分)
    6-7 Isomorphic (20分)
    6-5 Evaluate Postfix Expression (25分)
    服务器磁盘满无法释放空间解析及解决
    必会的MySQL操作方法
    Tomcat基本安装和优化方法
    Nginx常用配置及优化安全
    Redis笔记整理(三):进阶操作与高级部分
    Redis笔记整理(二):Java API使用与Redis分布式集群环境搭建
    Redis笔记整理(一):Redis安装配置与数据类型操作
  • 原文地址:https://www.cnblogs.com/SimonHu1993/p/14429884.html
Copyright © 2011-2022 走看看