oracle dbms_crypto,DBMS_CRYPTO

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对象时使用过的相同的密码类型、键值及初始化向量。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle Database 21c 中,您可以使用 DBMS_CRYPTO 包对数据库中的数据进行加密和解密。下面是一个使用 DBMS_CRYPTO 包进行加密和解密的示例: 1. 创建一个测试表: ```sql CREATE TABLE test_table ( id NUMBER, data VARCHAR2(100) ); ``` 2. 向测试表中插入一些数据: ```sql INSERT INTO test_table VALUES (1, 'Hello, world!'); INSERT INTO test_table VALUES (2, 'This is a test.'); ``` 3. 使用 DBMS_CRYPTO 包对数据进行加密: ```sql DECLARE l_key_raw RAW(128) := utl_raw.cast_to_raw('my_secret_key'); l_data_raw RAW(2000); l_encrypted_raw RAW(2000); BEGIN FOR r IN (SELECT id, utl_raw.cast_to_raw(data) AS data_raw FROM test_table) LOOP l_data_raw := r.data_raw; l_encrypted_raw := dbms_crypto.encrypt( src => l_data_raw, typ => dbms_crypto.des_cbc_pkcs5, key => l_key_raw ); UPDATE test_table SET data = utl_raw.cast_to_varchar2(l_encrypted_raw) WHERE id = r.id; END LOOP; END; ``` 上面的代码将使用 DES 算法对 test_table 表中的数据进行加密,并将加密后的数据保存回表中。 4. 使用 DBMS_CRYPTO 包对数据进行解密: ```sql DECLARE l_key_raw RAW(128) := utl_raw.cast_to_raw('my_secret_key'); l_data_raw RAW(2000); l_decrypted_raw RAW(2000); BEGIN FOR r IN (SELECT id, utl_raw.cast_to_raw(data) AS data_raw FROM test_table) LOOP l_data_raw := r.data_raw; l_decrypted_raw := dbms_crypto.decrypt( src => l_data_raw, typ => dbms_crypto.des_cbc_pkcs5, key => l_key_raw ); UPDATE test_table SET data = utl_raw.cast_to_varchar2(l_decrypted_raw) WHERE id = r.id; END LOOP; END; ``` 上面的代码将使用 DES 算法对 test_table 表中的数据进行解密,并将解密后的数据保存回表中。 需要注意的是,在使用 DBMS_CRYPTO 包对数据进行加密和解密时,需要使用正确的密钥和算法,并且需要遵循最佳实践,确保数据的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值