declare l_src_data varchar2(20); l_type pls_integer :=DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_encval raw(2000); CURSOR secret_cursor IS select phonenumber from customer; begin OPEN secret_cursor; LOOP FETCH secret_cursor INTO l_src_data; l_encval :=dbms_crypto.encrypt( src=>utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); DBMS_OUTPUT.PUT_LINE (l_encval); EXIT WHEN secret_cursor%NOTFOUND; END LOOP; CLOSE secret_cursor; end; declare ;_src_data row(100) :=hextoraw("190248129038903853275ijdkvjkad'); l_type pls_integer :=dbms_crypto.encrypt_aes128+ + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_decval raw(200); begin l_decval :=dbms_crypto.decrypt( src=>l_src_data, typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); end;改错
时间: 2024-02-03 09:02:31 浏览: 587
有几个错误需要改正:
1. 在第一个代码块中,`raw(2000)` 应该改为 `raw(200)`,因为加密后的数据不会超过 200 个字节。
2. 在第二个代码块中,`row(100)` 应该改为 `raw(100)`,因为需要将十六进制字符串转换为原始二进制数据。
3. 在第一个代码块和第二个代码块中,加密类型 `DBMS_CRYPTO.ENCRYPT_AES128` 应该改为 `DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5`,以保证使用 AES128 算法、CBC 模式和 PKCS5 填充。
4. 在第二个代码块中,`l_src_data` 应该改为 `_src_data`,因为变量名不一致。
修改后的代码如下:
```
declare
l_src_data varchar2(20);
l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
l_key varchar2(20) := '0123456789123456';
l_encval raw(200);
CURSOR secret_cursor IS
select phonenumber from customer;
begin
OPEN secret_cursor;
LOOP
FETCH secret_cursor INTO l_src_data;
EXIT WHEN secret_cursor%NOTFOUND;
l_encval := dbms_crypto.encrypt(
src => utl_i18n.string_to_raw(l_src_data, 'AL32UTF8'),
typ => l_type,
key => utl_i18n.string_to_raw(l_key, 'AL32UTF8')
);
DBMS_OUTPUT.PUT_LINE(l_encval);
END LOOP;
CLOSE secret_cursor;
end;
declare
_src_data raw(100) := hextoraw('190248129038903853275ijdkvjkad');
l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128
+ DBMS_CRYPTO.CHAIN_CBC
+ DBMS_CRYPTO.PAD_PKCS5;
l_key varchar2(20) := '0123456789123456';
l_decval raw(200);
begin
l_decval := dbms_crypto.decrypt(
src => _src_data,
typ => l_type,
key => utl_i18n.string_to_raw(l_key, 'AL32UTF8')
);
end;
```
阅读全文