1.oracle中base64編碼說明
oracle的base64簽名并不像編程語言或者mysql的base64簽名那樣直觀,
在編程語言或許你只需要base64("編碼內(nèi)容")就好了,但是在oracle當(dāng)中要達(dá)到相同的效果,需要經(jīng)歷三個(gè)步驟:如下
BEGIN
DBMS_OUTPUT.PUT_LINE(
utl_raw.cast_to_varchar2(
utl_encode.BASE64_ENCODE(
UTL_RAW.CAST_TO_RAW('test'))));
END;
2.AES加密
oracle自帶多種加密算法,但加密算法一般由三部分組合而成
密鑰位數(shù):AES192 DBMS_CRYPTO.ENCRYPT_AES192
連接方式:CBC DBMS_CRYPTO.CHAIN_CBC
填充方式:PKCS5 DBMS_CRYPTO.PAD_PKCS5
單純的AES加密過后,返回的為16進(jìn)制字符串
--AES加密
BEGIN
DBMS_OUTPUT.PUT_LINE(
dbms_crypto.Encrypt(
UTL_RAW.CAST_TO_RAW(--待加密內(nèi)容需轉(zhuǎn)換成RAW類型,否則會報(bào)錯(cuò)
'test'--待加密內(nèi)容
),
dbms_crypto.AES_CBC_PKCS5,--密鑰位數(shù)+連接方式+填充方式
'12345678901234561234567890123456'--秘鑰
));
END;
單純的經(jīng)過aes加密后的結(jié)果:

aes加密.png
一般情況下,先經(jīng)過aes加密,再經(jīng)過base64簽名,這樣得到的內(nèi)容比較小,能節(jié)省空間
--aes加密過后再經(jīng)過base64進(jìn)行簽名
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加密過后再經(jīng)過base64簽名的結(jié)果.png
3AES解密
解密可以看做加密的逆向處理過程,先將密文由base64解簽,再解密,解密后轉(zhuǎn)換成RAW對象便能恢復(fù)加密前的效果;當(dāng)然解密的密鑰得和加密的密鑰一致
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