十四、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);
其中input\input_string指定輸入的二進制數據或輸入字符串,key\key_string指定加密密鑰,encrypted_date\encrypted_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_data\decrypted_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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM