Oracle 进行AES和Base64加解密

DECLARE
   input_string       VARCHAR2 (200) :=  'PL/SQL是世界上最好的语言!';  -- 加密前字符串
   output_string      VARCHAR2 (200);                                 -- 解密后字符串
   encrypted_raw      RAW (2000);                                     -- 储存加密后的字节
   decrypted_raw      RAW (2000);                                     -- 储存解密后的字节
   num_key_bytes      NUMBER := 128/8;                                -- 秘钥长度 128比特 (16位)
   key_bytes_raw      RAW (16);                                       -- 储存秘钥 128比特 (16位)
   encryption_type    PLS_INTEGER :=                                  -- 加密方式 AES/CBC/PKCS5Padding   
                            DBMS_CRYPTO.AES_CBC_PKCS5;
                      --      DBMS_CRYPTO.ENCRYPT_AES
                      --    + DBMS_CRYPTO.CHAIN_CBC
                      --    + DBMS_CRYPTO.PAD_PKCS5
                          

   iv_raw             RAW (16);                               -- 向量
   temp               varchar2(1000);                         -- 临时,AES加密并Base64后的结果   

BEGIN
   DBMS_OUTPUT.PUT_LINE ( '原始字符串: ' || input_string);
   -- 秘钥
   key_bytes_raw := UTL_I18N.STRING_TO_RAW('abcdef0123456789','AL32UTF8'); -- DBMS_CRYPTO.RANDOMBYTES (num_key_bytes);
   -- 向量
   iv_raw        := UTL_I18N.STRING_TO_RAW('9iuj87y2hbi5wxl1','AL32UTF8'); -- DBMS_CRYPTO.RANDOMBYTES (16);
   -- 加密过程
   encrypted_raw := DBMS_CRYPTO.ENCRYPT
      (
         src => UTL_I18N.STRING_TO_RAW (input_string,  'AL32UTF8'),
         typ => encryption_type,
         key => key_bytes_raw,
         iv  => iv_raw
      );
   -- Bas64  加密
   encrypted_raw := utl_encode.base64_encode(r => encrypted_raw);
   
   -- 密文
   temp := utl_raw.cast_to_varchar2(r => encrypted_raw);
   dbms_output.put_line(temp);
   

   -- 密文
   decrypted_raw  := utl_raw.cast_to_raw(c => temp);
   -- Base64 解密
   decrypted_raw := utl_encode.base64_decode(r => decrypted_raw);

    -- 解密解密
    decrypted_raw := DBMS_CRYPTO.DECRYPT
      (
         src => decrypted_raw,
         typ => encryption_type,
         key => key_bytes_raw,
         iv  => iv_raw
      );

   --    
   output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');

   DBMS_OUTPUT.PUT_LINE ('解密字符串:  ' || output_string);
END;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值