DECRYPT
通过使用您指定的加密算法、键及可选的初始化向量,函数DECRYPT或存储过程DECRYPT可解密数据。函数DECRYPT的语法如下:
DECRYPT
(src IN RAW, typ IN INTEGER, key IN RAW, iv IN RAW
DEFAULT NULL) RETURN RAW
存储过程DECRYPT的语法如下:
DECRYPT
(dst INOUT BLOB, src IN BLOB, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL)
或
DECRYPT
(dst INOUT CLOB, src IN CLOB, typ IN INTEGER, key IN RAW,
iv IN RAW DEFAULT NULL)
当把DECRYPT作为存储过程调用时,DECRYPT返回给您指定的BLOB的是BLOB或CLOB数据。
参数
dst
Dst用于指定BLOB数据的名称,存储过程DECRYPT的输出将会编写到这个指定名称的BLOB数据中。存储过程DECRYPT将覆写当前dst中任何已有的数据。
src
Src用于指定要解密的源数据。如果您把DECRYPT作为函数调用,那么就要指定RAW数据。如果您把DECRYPT作为存储过程调用,那么就要指定BLOB或CLOB数据。
typ
typ用于指定分组密码类型及任何修改器。 当对src加密时,应和指定的类型相匹配。PolarDB支持下列表中的分组加密算法、修改器及密码组:
Block Cipher Algorithms
ENCRYPT_DES
CONSTANT INTEGER := 1;
ENCRYPT_3DES
CONSTANT INTEGER := 3;
ENCRYPT_AES
CONSTANT INTEGER := 4;
ENCRYPT_AES128
CONSTANT INTEGER := 6;
Block Cipher Modifiers
CHAIN_CBC
CONSTANT INTEGER := 256;
CHAIN_ECB
CONSTANT INTEGER := 768;
Block Cipher Padding Modifiers
PAD_PKCS5
CONSTANT INTEGER := 4096;
PAD_NONE
CONSTANT INTEGER := 8192;
Block Cipher Suites
DES_CBC_PKCS5
CONSTANT INTEGER := ENCRYPT_DES + CHAIN_CBC + PAD_PKCS5;
DES3_CBC_PKCS5
CONSTANT INTEGER := ENCRYPT_3DES + CHAIN_CBC + PAD_PKCS5;
AES_CBC_PKCS5
CONSTANT INTEGER := ENCRYPT_AES + CHAIN_CBC + PAD_PKCS5;
key
Key用于指定用户定义的解密键。当对src加密时,应和指定的键相匹配。
iv
iv (可选的)用于指定初始化向量。当对src加密时,如果指定了一个初始化向量,那么您必须在解密src时也指定一个初始化向量。缺省值为NULL:
示例
下列示例使用函数DBMS_CRYPTO .DECRYPT来解密从表passwords中检索出的加密的口令。
CREATE TABLE passwords
(
principal VARCHAR2(90) PRIMARY KEY, -- username
ciphertext RAW(9) -- encrypted password
);
CREATE FUNCTION get_password(username VARCHAR2) RETURN RAW AS
typ INTEGER := DBMS_CRYPTO.DES_CBC_PKCS5;
key RAW(128) := 'my secret key';
iv RAW(100) := 'my initialization vector';
password RAW(2048);
BEGIN
SELECT ciphertext INTO password FROM passwords WHERE principal = username;
RETURN dbms_crypto.decrypt(password, typ, key, iv);
END;
需要注意的是,当调用DECRYPT时,您必须传递在ENCRYPTING对象时使用过的相同的密码类型、键值及初始化向量。