SQL> DECLARE
2 input_string VARCHAR2(30) := '需要加密的内容';
3 raw_input RAW(128) := UTL_RAW.CAST_TO_RAW(input_string);
4 --将需要加密的内容转换成RAW格式
5 raw_key RAW(256);
6 encrypted_raw RAW(2048);
7 encrypted_string VARCHAR2(2048);
8 decrypted_raw RAW(2048);
9 decrypted_string VARCHAR2(2048);
10
11 BEGIN
12 dbms_output.put_line('> ========= Get Key Bytes =========');
13
14 raw_key := dbms_crypto.randombytes(24);
15 --随机生成的48位字符密匙
16 dbms_output.put_line('> Key String length: ' || UTL_RAW.LENGTH(raw_key));
17 dbms_output.put_line('> Key String: ' || UTL_RAW.CAST_TO_VARCHAR2(raw_key));
18 dbms_output.put_line('> Input String: ' || input_string);
19 dbms_output.put_line('> ========= BEGIN TEST Encrypt =========');
20 --加密
21 encrypted_raw := dbms_crypto.Encrypt(src => raw_input,
22 typ => DBMS_CRYPTO.DES3_CBC_PKCS5,
23 key => raw_key);
24
25 dbms_output.put_line('> Encrypted hex value : ' || rawtohex(UTL_RAW.CAST_TO_RAW(encrypted_raw)));
26 dbms_output.put_line('> Encrypted varchar2 value: ' || UTL_RAW.CAST_TO_VARCHAR2(encrypted_raw));
27 --解密
28 decrypted_raw := dbms_crypto.Decrypt(src => encrypted_raw,
29 typ => DBMS_CRYPTO.DES3_CBC_PKCS5,
30 key => raw_key);
31 --将解密后的RAW转换成String
32 decrypted_string := UTL_RAW.CAST_TO_VARCHAR2(decrypted_raw);
33
34 dbms_output.put_line('> Decrypted string output : ' || decrypted_string);
35
36 if input_string = decrypted_string THEN
37 dbms_output.put_line('> String DES Encyption and Decryption successful');
38 END if;
39 END;
40 /
> ========= Get Key Bytes =========
> Key String length: 24
> Key String: 峈报T??崛╭顋卖I~漥?篻
> Input String: 需要加密的内容
> ========= BEGIN TEST Encrypt =========
> Encrypted hex value : 374132424133453633303945433530364534414334443943303346343735303643464630393330313436454441443930
> Encrypted varchar2 value: z+f0炁洮M?魎橡?F憝