如何保护好经过MD5加密过的密码
2009-10-19 10:48
363 查看
今天,偶然想看过一段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的线索。
由此引发了对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的线索。
相关文章推荐
- 如何在mysql中修改md5加密过的用户密码
- 如何用彩虹表破解MD5、LM Hash等复杂加密密码
- 用户密码通过MD5加密后,如何验证呢?
- 如何实现数据库连接的密码加密
- 使用MD5对用户密码加密与解密
- vue项目用sha256、md5、base64加密密码
- 使用MD5对密码进行加密
- 使用MD5对明文密码进行加密
- Android 指纹解锁和MD5加密密码
- 如何使用MD5技术加密
- 如何判断一个字符串是否经过base64加密过
- delphi7 经过测试的 md5 加密解密
- JS实现密码加密(base64, md5, sha1)
- Discuz!6.1.0 用户密码如何加密的?
- MD5 加密IP地址 密码
- asp.net 2.0中md5密码加密
- 密码保存至后台表加密所需的MD5哈希值转换文件CommonHelper.Md5Encrypt
- 有趣的密码加密策略,你知道自己的密码如何在网站中存储的吗?
- MD5 密码加密
- meeageDigest_密码md5加密方法