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加密,再经过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;
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;