參考Oracle官方文檔
在Oracle使用dbms_crypto包進行加解密
首先蹬敲,授權當前用戶使用加解密包
在sql中運行:
connect sqlplus as sysdba
grant execute on sys.dbms_crypto to user;
dbms_crypto支持以下算法
DES,3DES(2-key and 3-ke)
AES,
MD5, MD4, SHA-1, and SHA-2 哈希算法
MAC (消息認證碼,Message authentication code)
支持的完整算法見:
https://docs.oracle.com/database/121/ARPLS/d_crypto.htm#ARPLS6567
dbms_crypto包含以下子程序
加解密警没,哈希恰梢,隨機生成整數,生成key等等
子程序
語法
解密
函數
DBMS_CRYPTO.DECRYPT(
src IN RAW,
typ IN PLS_INTEGER,
key IN RAW,
iv IN RAW DEFAULT NULL)
RETURN RAW;
參數
PLS_INTEGER 算法代號包括 HASH_MD5,HASH_SH1躏率,ENCRYPT_DES等蓬抄,
完整代號見: https://docs.oracle.com/database/121/ARPLS/d_crypto.htm#ARPLS65675
注意事項:
不能直接加密varchar2類型耍贾,需要轉為RAW類型后再加密
互相轉換語法為:
UTL_I18N.RAW_TO_CHAR (data, 'AL32UTF8');
UTL_I18N.STRING_TO_RAW (string, 'AL32UTF8');
下同胆敞。
存儲過程
DBMS_CRYPTO.DECRYPT(
dst IN OUT NOCOPY BLOB,
src IN BLOB,
typ IN PLS_INTEGER,
key IN RAW,
iv IN RAW DEFAULT NULL);
DBMS_CRYPT.DECRYPT(
dst IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
src IN BLOB,
typ IN PLS_INTEGER,
key IN RAW,
iv IN RAW DEFAULT NULL);
加密
函數
DBMS_CRYPTO.ENCRYPT(
src IN RAW,
typ IN PLS_INTEGER,
key IN RAW,
iv IN RAW DEFAULT NULL)
RETURN RAW;
存儲過程
DBMS_CRYPTO.ENCRYPT(
dst IN OUT NOCOPY BLOB,
src IN BLOB,
typ IN PLS_INTEGER,
key IN RAW,
iv IN RAW DEFAULT NULL);
DBMS_CRYPTO.ENCRYPT(
dst IN OUT NOCOPY BLOB,
src IN CLOB CHARACTER SET ANY_CS,
typ IN PLS_INTEGER,
key IN RAW,
iv IN RAW DEFAULT NULL);
哈希函數
DBMS_CRYPTO.Hash (
src IN RAW,
typ IN PLS_INTEGER)
RETURN RAW;
DBMS_CRYPTO.Hash (
src IN BLOB,
typ IN PLS_INTEGER)
RETURN RAW;
DBMS_CRYPTO.Hash (
src IN CLOB CHARACTER SET ANY_CS,
typ IN PLS_INTEGER)
RETURN RAW;
Oracle推薦使用 SHA-1 或 or SHA-2观话,因為相較于MD4和MD5晦溪,它們更抵抗暴力攻擊
生成二進制整數
函數
DBMS_CRYPTO.RANDOMBYTES (
number_bytes IN POSITIVE)
RETURN RAW;
存儲過程
DBMS_CRYPTO.RANDOMINTEGER
RETURN BINARY_INTEGER;
隨機整數
函數
DBMS_CRYPTO.RANDOMNUMBER
RETURN NUMBER;
生成0 - 2**128-1之間的整數
其它
數據類型
數據類型
異常
異常