工作需要使用sql對某個字段進行加密處理,創(chuàng)建MD5處理函數(shù)如下:
創(chuàng)新互聯(lián)擁有十年成都網(wǎng)站建設(shè)工作經(jīng)驗,為各大企業(yè)提供網(wǎng)站制作、成都網(wǎng)站設(shè)計服務(wù),對于網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、成都App定制開發(fā)、wap網(wǎng)站建設(shè)(手機版網(wǎng)站建設(shè))、程序開發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、域名注冊等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷經(jīng)驗,集策劃、開發(fā)、設(shè)計、營銷、管理等網(wǎng)站化運作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項目的能力。
使用示例:
但是跑數(shù)中途遇到如下報錯:
檢查發(fā)現(xiàn),當(dāng)md5函數(shù)輸入?yún)?shù)為空時,導(dǎo)致報錯,修改函數(shù)如下,解決:
最簡單的,把sys收了,異用戶查詢授權(quán)。
要是涉及到代碼移交,那就用函數(shù)實現(xiàn)view,然后用DBMS_DDL.WRAP加密
Oracle 提供兩種加密方式:
a)加密 API 例如包 和 dbms_crypto 使用這些包,可以構(gòu)建我們自己的基礎(chǔ)架構(gòu),對數(shù)據(jù)進行加密。 這種方法的靈活性最強,但是構(gòu)建和管理卻相當(dāng)復(fù)雜。
b)透明的數(shù)據(jù)加密是 Oracle 數(shù)據(jù)庫 ;使用該特性后,就不必手動進行密碼管理了。
數(shù)據(jù)庫管理密碼,但是正如名稱所指,加密是透明的——數(shù)據(jù)僅僅以加密的方式存儲而已。在Oracle10g中出現(xiàn)了dbms_crypto替代了之前的dbms_obfuscation_toolkit,DBMS_CRYPTO增加了若干新的加密算法、哈希算法。
DBMS_CRYPTO還撤銷了對于public組的執(zhí)行權(quán)限。
1、DBMS_OBFUSCATION_TOOLKIT.MD5是MD5編碼的數(shù)據(jù)包函數(shù)
CREATE OR REPLACE FUNCTION MD5(passwd IN VARCHAR2)
RETURN VARCHAR2
IS
retval varchar2(32);
BEGIN
retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING = passwd)) ;
RETURN retval;
END;
select md5('123456') from dual;
MD5('123456')
e10adc3949ba59abbe56e057f20f883e
2、DES加密
create or replace function
encrypt_des(p_text varchar2, p_key varchar2) return varchar2 is
v_text varchar2(4000);
v_enc varchar2(4000);
raw_input RAW(128) ;
key_input RAW(128) ;
decrypted_raw RAW(2048);
begin
v_text := rpad( p_text, (trunc(length(p_text)/8)+1)*8, chr(0));
raw_input := UTL_RAW.CAST_TO_RAW(v_text);
key_input := UTL_RAW.CAST_TO_RAW(p_key);
dbms_obfuscation_toolkit.DESEncrypt(input = raw_input,key = key_input,encrypted_data =decrypted_raw);
v_enc := rawtohex(decrypted_raw);
dbms_output.put_line(v_enc);
return v_enc;
end;
DES加密:
update tb_salarysign_staff s set s.staffpwd =encrypt_des(s.staffpwd, 'test#5124*!de');
3、DES解密函數(shù)
create or replace function decrypt_des(p_text varchar2,p_key varchar2) return varchar2 is
v_text varchar2(2000);
begin
dbms_obfuscation_toolkit.DESDECRYPT(input_string = UTL_RAW.CAST_TO_varchar2(p_text),key_string =p_key, decrypted_string= v_text);
v_text := rtrim(v_text,chr(0));
dbms_output.put_line(v_text);
return v_text;
end;
DES解密:select decrypt_des(s.staffpwd, 'test#5124*!de') from tb_salarysign_staff s;
(1)DES加密函數(shù)
create
or
replace
function
encrypt_des(p_text
varchar2,
p_key
varchar2)
return
varchar2
is
v_text
varchar2(4000);
v_enc
varchar2(4000);
raw_input
RAW(128)
;
key_input
RAW(128)
;
decrypted_raw
RAW(2048);
begin
v_text
:=
rpad(
p_text,
(trunc(length(p_text)/8)+1)*8,
chr(0));
raw_input
:=
UTL_RAW.CAST_TO_RAW(v_text);
key_input
:=
UTL_RAW.CAST_TO_RAW(p_key);
dbms_obfuscation_toolkit.DESEncrypt(input
=
raw_input,key
=
key_input,encrypted_data
=decrypted_raw);
v_enc
:=
rawtohex(decrypted_raw);
dbms_output.put_line(v_enc);
return
v_enc;
end;
(2)DES解密函數(shù)
create
or
replace
function
decrypt_des(p_text
varchar2,p_key
varchar2)
return
varchar2
is
v_text
varchar2(2000);
begin
dbms_obfuscation_toolkit.DESDECRYPT(input_string
=
UTL_RAW.CAST_TO_varchar2(p_text),key_string
=p_key,
decrypted_string=
v_text);
v_text
:=
rtrim(v_text,chr(0));
dbms_output.put_line(v_text);
return
v_text;
end;
(3)MD5加密函數(shù)
CREATE
OR
REPLACE
FUNCTION
MD5(passwd
IN
VARCHAR2)
RETURN
VARCHAR2
IS
retval
varchar2(32);
BEGIN
retval
:=
utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING
=
passwd))
;
RETURN
retval;
END;
(4)函數(shù)使用示例
DES加密:
update
tb_salarysign_staff
s
set
s.staffpwd
=encrypt_des(s.staffpwd,
'test#5124*!de');
DES解密:select
decrypt_des(s.staffpwd,
'test#5124*!de')
from
tb_salarysign_staff
s
MD5加密:
update
tb_salarysign_staff
s
set
s.staffpwd
=
md5(s.staffpwd);