DECLARE i_key RAW(32); BEGIN i_key :=UTL_RAW.cast_to_raw('618272'); UPDATE ORDERS SET TotalCost = DBMS_CRYPTO.ENCRYPT( src=>UTL_RAW.CAST_TO_RAW(TO_CHAR(TotalCost)), typ=>DBMS_CRYPTO.AES_CBC_PKCS5, key=>i_key, iv=>NULL ) WHERE TotalCost IS NOT NULL; END; /
时间: 2023-12-06 14:42:54 浏览: 29
这是一个使用 PL/SQL 语言编写的 Oracle 数据库加密脚本。该脚本使用了 Oracle 提供的 DBMS_CRYPTO 包中的 AES_CBC_PKCS5 算法对 ORDERS 表中的 TotalCost 字段进行加密,并将加密后的结果存储回 TotalCost 字段中。其中 i_key 变量存储了加密密钥,使用 UTL_RAW.CAST_TO_RAW 函数将 TotalCost 字段转换为二进制数据,然后将其作为参数传递给 DBMS_CRYPTO.ENCRYPT 函数进行加密。最后,使用 WHERE 子句过滤掉 TotalCost 为空的记录。
相关问题
改正:ALTER TABLE ORDERS MODIFY TotalCost NUMBER(35,2);DECLARE i_key RAW(32); BEGIN i_key :=UTL_RAW.cast_to_raw('618272'); UPDATE ORDERS SET TotalCost = DBMS_CRYPTO.ENCRYPT( src=>UTL_RAW.CAST_TO_RAW(TotalCost), typ=>DBMS_CRYPTO.AES_CBC_PKCS5, key=>i_key, iv=>NULL ) WHERE TotalCost IS NOT NULL; END; /
修改:ALTER TABLE ORDERS MODIFY TotalCost NUMBER(35,2);
DECLARE
i_key RAW(32);
BEGIN
i_key := UTL_RAW.cast_to_raw('618272');
UPDATE ORDERS
SET TotalCost = DBMS_CRYPTO.ENCRYPT(
src => UTL_RAW.CAST_TO_RAW(TO_CHAR(TotalCost)),
typ => DBMS_CRYPTO.AES_CBC_PKCS5,
key => i_key,
iv => NULL
)
WHERE TotalCost IS NOT NULL;
END; /
这个修改过的代码将 TotalCost 列中的值进行了加密,并将其更新回数据库。在这里,我们使用 AES_CBC_PKCS5 加密算法对 TotalCost 进行加密,使用的密钥是 '618272'。注意,我们需要通过 TO_CHAR 函数将 TotalCost 转换为字符串类型,以便进行加密。
使用DBMS_CRYPTO以618272为密钥加密ORDERS表中的TotalCost NUMBER(10,2)列的数据
首先需要确认数据库版本是否支持DBMS_CRYPTO包。若支持,则可以按照以下步骤进行加密:
1. 创建密钥
```
DECLARE
key_val RAW(32) := utl_raw.cast_to_raw('618272');
BEGIN
DBMS_CRYPTO.randombytes(32, key_val);
END;
```
2. 加密数据
```
UPDATE orders SET totalcost = DBMS_CRYPTO.ENCRYPT(
UTL_RAW.CAST_TO_RAW(TO_CHAR(totalcost)),
DBMS_CRYPTO.HASH(key_val, DBMS_CRYPTO.HASH_SH512))
WHERE ...
```
3. 解密数据
```
SELECT DBMS_CRYPTO.DECRYPT(
totalcost,
DBMS_CRYPTO.HASH(key_val, DBMS_CRYPTO.HASH_SH512))
FROM orders
WHERE ...
```
需要注意的是,加密后的数据类型为RAW,需要使用DBMS_CRYPTO.CONVERT函数转换为其他类型(如VARCHAR2)。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)