Oracle 加解密教程

参考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之间的整数

其它

数据类型


数据类型

异常


异常

你可能感兴趣的:(Oracle 加解密教程)