zoukankan      html  css  js  c++  java
  • 十四、dbms_obfuscation_toolkit(用于加密和解密应用数据)

    1、概述


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


    2、包的组成


    1)、DESencrypt
    作用:用于使用DES算法对输入数据进行加密,并生成加密格式的数据。密钥长度不能低于8字节且输入数据必须是8字节的整数倍。
    语法1:dbms_obfuscation_toolkit.DESencrypt(input raw,key raw,encrypted_date out raw);
    语法2:dbms_obfuscation_toolkit.DESencrypt(ipput_string varchar2,key_string varchar2,encrypted_string out varchar2);
    其中inputinput_string指定输入的二进制数据或输入字符串,keykey_string指定加密密钥,encrypted_dateencrypted_string指定存放加密结果的字符串。

    2)、DESdecrypt
    作用:用于对使用DES算法所生成的加密数据进行解密。当对数据进行
    解密时,解密密钥必须要与加密密钥完全一致。
    语法1:dbms_obfuscation_toolkit.desdecrypt(input raw,key raw,decrypted_data out raw);
    语法2:dbms_obfuscation_toolkit.desdecrypt(input_string varchar2,key_string varchar2,decrypted_string out varchar2);
    其中decrypted_datadecrypted_string指定存放解密结果的字符串。

    3)、DES3encrypt
    作用:用于使用DES3算法对输入数据进行加密,并生成加密格式的数据。密钥不能少于16个字符并且数据数据必须是8字节的整数倍。
    语法1:dbms_obfuscation_toolkit.DES3encrypt(input raw,key raw,encrypted_data out raw);
    语法2:dbms_obfuscation_toolkit.DES3encrypt(input_string varchar2,key_string varchar2,encrypted_string out varchar2);

    4)、DES3decrypt
    作用:用于对使用DES3算法所生成的加密数据进行解密。解密密钥必须要与加密密钥完全一致。
    语法1:dbms_obfuscation_toolkit.DES3decrypt(input raw,key raw,decrypted_data out raw);
    语法2:dbms_obfuscation_toolkit.DES3decrypt(input_string varchar2,key_string varchar2,encrypted_string out varchar2);

    5)、md5
    作用:用于使用md5算法生成密码校验码。可以防止其他用户破坏被传输的加密数据。
    语法1:dbms_obfuscation_toolkit.md5(input raw,checksum out raw);
    语法2:dbms_obfuscation_toolkit.md5(input_string varchar2,checksum_string out varchar2);
    其中checksum_string(checksum)指定存放密码校验码的字符串。


    3、综合例子


    1)、简单例子

    declare
    encrypted_string varchar2(100);
    decrypted_string varchar2(100);
    str1 varchar2(8):='中国你好';
    key varchar2(16):='ABCDFDSDSASS$1234';
    str2 varchar2(100);
    str3 varchar2(100);
    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.DES3encrypt(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;



    2)、例子2
    说明:为了防止黑客窃取数据,应该对数据进行加密,为防止黑客窜改数据,应该使用密码校验来确保数据的正确性。
    下面使用管道发送加密信息并确保消息正确性
    (1)、建立过程send_message
    说明:用于生产消息的密码校验码、加密信息,并分别发到不同的管道。

    create or replace procedure send_message(message varchar2) is
    flag int;
    checksum varchar2(100);
    key varchar2(100);
    encry_str varchar2(100);
    begin
    dbms_obfuscation_toolkit.md5(input_string=>message,checksum_string=>checksum);--用MD5为消息生产密码校验码
    flag:=dbmspipe.create_pipe('checksum');--建立checksum管道
    if flag=0 then
    dbms_pipe.pack_message(checksum);
    flag:=dbms_pipe.send_message('checksum');--发送校验码
    end if;
    dbms_obfuscation_toolkit.desencrypt(input_string=>message,key_string=>key,encrypted_string=>encry_str);--加密要发送的消息。
    flag:=dbms_pipe.create_pipe('encrypt');--建立encrypt管道
    if flag=0 then
    dbms_pipe.pack_message(encrypt);
    flag:=dbms_pipe.send_message('encrypt');--发送信息
    end if;
    end;


    (2)、建立过程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;


    (3)、使用
    会话1:exec send_message('中国你好');
    会话2:exec scott.receive_message;

  • 相关阅读:
    html HTML 文本格式化
    纯css3实现图片切换
    绝对路径和相对路径
    CSS设置html网页背景图片 CSS设置网页背景颜色
    使用CSS3制作响应式网页背景图像
    CSS背景全攻略
    HTML中通过CSS设置背景图片自适应浏览器大小
    CSS设置背景——图片背景
    如何让图片自适应手机等移动设备屏幕大小
    SERVER 2012 R2 对域用户禁用移动存储设备
  • 原文地址:https://www.cnblogs.com/champaign/p/9468640.html
Copyright © 2011-2022 走看看