oracle加密的用法即注意事项

1.oracle中base64编码说明

oracle的base64签名并不像编程语言或者mysql的base64签名那样直观,
在编程语言或许你只需要base64("编码内容")就好了,但是在oracle当中要达到相同的效果,需要经历三个步骤:如下

BEGIN
  DBMS_OUTPUT.PUT_LINE(
      utl_raw.cast_to_varchar2(
          utl_encode.BASE64_ENCODE(
              UTL_RAW.CAST_TO_RAW('test'))));
END;

2.AES加密

oracle自带多种加密算法,但加密算法一般由三部分组合而成
密钥位数:AES192 DBMS_CRYPTO.ENCRYPT_AES192
连接方式:CBC DBMS_CRYPTO.CHAIN_CBC
填充方式:PKCS5 DBMS_CRYPTO.PAD_PKCS5

单纯的AES加密过后,返回的为16进制字符串

--AES加密
BEGIN
  DBMS_OUTPUT.PUT_LINE(
      dbms_crypto.Encrypt(
          UTL_RAW.CAST_TO_RAW(--待加密内容需转换成RAW类型,否则会报错
            'test'--待加密内容
          ),
          dbms_crypto.AES_CBC_PKCS5,--密钥位数+连接方式+填充方式
          '12345678901234561234567890123456'--秘钥
));
END;

单纯的经过aes加密后的结果:


aes加密.png

一般情况下,先经过aes加密,再经过base64签名,这样得到的内容比较小,能节省空间

--aes加密过后再经过base64进行签名
BEGIN
  DBMS_OUTPUT.PUT_LINE(
      utl_raw.cast_to_varchar2(
          UTL_ENCODE.BASE64_ENCODE(
              dbms_crypto.Encrypt(UTL_RAW.CAST_TO_RAW('test'),
                                  dbms_crypto.AES_CBC_PKCS5,
                                  '12345678901234561234567890123456'))
      ));
END;
aes加密过后再经过base64签名的结果.png

3AES解密

解密可以看做加密的逆向处理过程,先将密文由base64解签,再解密,解密后转换成RAW对象便能恢复加密前的效果;当然解密的密钥得和加密的密钥一致

BEGIN
  DBMS_OUTPUT.PUT_LINE(
  utl_raw.cast_to_varchar2(
      dbms_crypto.Decrypt(utl_encode.BASE64_DECODE(UTL_RAW.CAST_TO_RAW('edgjBzMCq0lLXpXir7+Fcg==')),
                          dbms_crypto.AES_CBC_PKCS5,
                          '12345678901234561234567890123456')));
END;
aes解密的效果图.png

你可能感兴趣的:(oracle加密的用法即注意事项)