Oracle基础包之DBMS_OBFUSCATION_TOOLKIT(十四)

1、概述
作用:

用于加密和解密应用数据,另外还可以生成密码检验和.通过加密输入数据,可以防止黑客或其他用户窃取私有数据;
而通过结合使用加密和密码检验和,可以防止黑客破坏初加密的数据.
当使用该包加密数据时,要求被加密数据的长度必须为8字节的整数倍.当使用DES算法加密数据时,
密钥长度不能低于8字节;当使用DES3算法加密数据时,密钥长度不能低于16字节.

2、包组成
(1)DESencrypt
作用:

用于使用DES算法对输入数据进行加密,并生成加密格式的数据。密钥长度不能低于8字节且输入数据必须是8字节的整数倍。

语法:
-- 其中input\input_string指定输入的二进制数据或输入字符串,key\key_string指定加密密钥,
-- encrypted_date\encrypted_string指定存放加密结果的字符串。
dbms_obfuscation_toolkit.DESencrypt(input raw,key raw,encrypted_date out raw);
dbms_obfuscation_toolkit.DESencrypt(ipput_string varchar2,key_string varchar2,encrypted_string out varchar2);
(2)DESdecrypt
作用:

用于对使用DES算法所生成的加密数据进行解密。当对数据进行解密时,解密密钥必须要与加密密钥完全一致。

语法:
-- 其中decrypted_data\decrypted_string指定存放解密结果的字符串。
dbms_obfuscation_toolkit.desdecrypt(input raw,key raw,decrypted_data out raw);
dbms_obfuscation_toolkit.desdecrypt(input_string varchar2,key_string varchar2,decrypted_string out varchar2);

(3)DES3encrypt
作用:

用于使用DES3算法对输入数据进行加密,并生成加密格式的数据。密钥不能少于16个字符并且数据数据必须是8字节的整数倍。

语法:
dbms_obfuscation_toolkit.DES3encrypt(input raw,key raw,encrypted_data out raw);
dbms_obfuscation_toolkit.DES3encrypt(input_string varchar2,key_string varchar2,encrypted_string out varchar2);

(4)DES3decrypt
作用:

用于对使用DES3算法所生成的加密数据进行解密。解密密钥必须要与加密密钥完全一致。

语法:
dbms_obfuscation_toolkit.DES3decrypt(input raw,key raw,decrypted_data out raw);
dbms_obfuscation_toolkit.DES3decrypt(input_string varchar2,key_string varchar2,encrypted_string out varchar2);

(5)md5
作用:

用于使用md5算法生成密码校验码。可以防止其他用户破坏被传输的加密数据。

语法:
-- 其中checksum_string(checksum)指定存放密码校验码的字符串。
dbms_obfuscation_toolkit.md5(input raw,checksum out raw);
dbms_obfuscation_toolkit.md5(input_string varchar2,checksum_string out varchar2);
3、综合示例
demo1:
declare
 encrypted_string varchar2(100);
 decrypted_string varchar2(100);
 str1 varchar2(25) := '我爱你,中国';
 key varchar2(32) := 'ABCDFDSDSASS$1234';
 str2 varchar2(200);
 str3 varchar2(200);
 begin
 --DESencrypt
 dbms_obfuscation_toolkit.DESencrypt(input_string=>'SCOTTsco',key_string=>'abcd1234',encrypted_string=>encrypted_string);
 dbms_output.put_line(encrypted_string);
 --DESdecrypt
 dbms_obfuscation_toolkit.DESdecrypt(input_string=>encrypted_string,key_string=>'abcd1234',decrypted_string=>decrypted_string);
 dbms_output.put_line(decrypted_string);
 --DES3encrypt
 dbms_obfuscation_toolkit.DES3encrypt(input_string=>str1,key_string=>key,encrypted_string=>str2);
 dbms_output.put_line(str2);
 --DES3decrypt
 dbms_obfuscation_toolkit.DES3Decrypt(input_string=>str2,key_string=>key,decrypted_string=>str3);
 dbms_output.put_line(str3);
 --md5
 dbms_obfuscation_toolkit.md5(input_string=>str1,checksum_string=>str2);
 dbms_output.put_line(str2);
 end;
demo2:
--建立过程receive_message,用于接收校验码和消息
create or replace procedure receive_message is
    flag            int;
    source_checksum varchar2(100);
    dest_checksum   varchar2(100);
    key             varchar2(100) := '123456778SAD';
    encry_str       varchar2(100);
    decry_str       varchar2(100);
begin
    flag := dbms_pipe.receive_message('encrypt');
    --接收加密消息
    if flag = 0 then
        dbms_pipe.unpack_message(encry_str);
        flag := dbms_pipe.remove_pipe('encrypt');
    end if;
    flag := dbms_pipe.receive_message('checksum');
    --接收加密消息
    if flag = 0 then
        dbms_pipe.unpack_message(source_checksum);
        flag := dbms_pipe.remove_pipe('checksum');
    end if;
    dbms_obfuscation_toolkit.desdecrypt(input_string     => encry_str,
                                        key_string       => key,
                                        decrypted_string => decry_str);
    --使用密钥解密信息
    dbms_obfuscation_toolkit.md5(input_string    => decry_str,
                                 checksum_string => dest_checksum);
    --生产密码校验码
    if trim(source_checksum) = trim(dest_checksum) then
        dbms_output.put_line(decry_str);
    else
        dbms_output.put_line('消息被窜改');
    end if;
end;

--使用示例
exec send_message('我爱你,中国');
exec scott.receive_message;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜未央,流年殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值