如何保護好經過MD5加密過的密碼

今天,偶然想看過一段MD5後面的內容,baidu,和google一通後,如願以償。

由此引發了對MD5加密的擔憂。

其實,從幾分鐘搜索得知的破解手段來看,無非就是暴力,字典,和海量數據庫這幾種手段,想了想,想要更可靠的保護好你的MD5還是很簡單的,希望開發人員多動腦,而不僅僅是baidu過來,能用就行了。

下面提供ORACLE下最簡單的MD5加密程序,和安全MD5加密程序。

經典MD5加密函數:

create or replace FUNCTION T_GET_MD5( p_str in varchar2)
RETURN varchar2 IS
BEGIN
RETURN lower(Utl_Raw.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => Upper(p_str))));
END;

原創安全MD5加密函數

create or replace FUNCTION T_SECURE_MD5( p_str in varchar2)
RETURN varchar2 IS
BEGIN
RETURN lower(Utl_Raw.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => Upper(SUBSTR(lower(Utl_Raw.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => Upper(p_str)))),2,5)||'@Ray'||SUBSTR(lower(Utl_Raw.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => Upper(p_str)))),-7,3)))));
END;

select T_SECURE_MD5('1233212') from dual;
1d5c582eaca5845c9233fe0bc4033123

select T_GET_MD5('1233212') from dual;
2e2de7dd00440bc773977e27407f11ca

通過這個號稱共有md5記錄457,354,352,282條的網站查一下,
http://www.cmd5.com/default.aspx

後者
查詢結果:  
1233212


前者
查詢結果:  
Not found


前者即使通過任何手段獲取,依然不是原始密碼,而是經過轉換過的“e2de7@Ray07f”

從原理上講,安全MD5加密函數是不可逆的。

如果並不在意標準的MD5輸出,甚者可以
create or replace FUNCTION T_SECURE_MD5( p_str in varchar2)
RETURN varchar2 IS
BEGIN
RETURN SUBSTR(lower(Utl_Raw.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => Upper(SUBSTR(lower(Utl_Raw.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => Upper(p_str)))),2,5)||'@Ray'||SUBSTR(lower(Utl_Raw.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => Upper(p_str)))),-7,3))))),7,12);
END;
既節省了存儲空間,又消滅了MD5的線索。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章