网站数据库中“密码加密”方法思考
2013-11-04 19:16
295 查看
博主,开始时候,写的web应用,数据库中的密码,都是直接保存的。真正的原汁原味,真正的所见即所得。
后来,看了别人的web应用都是MD5加密的,感觉很不错,自己也在应用中加入了MD5加密,貌似“不可逆”的,哈哈,看起来也专业了许多,后来听说CSDN用户信息被黑客窃取了,自己也赶紧去换了密码。
今天,无意间看了http://howe.im/(探微·智在未来)的一篇博文《安全密码机制(salt机制)》,才知道了,单纯使用MD5加密,也是不安全的,这里简单说下,所读博文的内容和自己的一点认识吧。
首先,解释下,为什么单纯MD5加密,是不安全的,我们暂且不论MD5是否可以由密文推出明文(有32位密文计算出加密前的密码),也不论用户的密码是否符合很高的安全性(加入大小写字母、数字、特殊字符等),当黑客窃取一个大型网站的数据库信息后,通过MD5加密(而非解密)方法,不断加密一些密码,如123abc,加密后A906449D5769FA7361D7ECC6AA3F6D28,在数据库中搜索,是否存在匹配密文,如果存在,则相应的用户密码就被破解了。不断的穷举密码,加密,匹配。这个速度是很快的,MD5加密很快,数据库匹配可以优化。
然后,说下,博文中介绍的salt机制。
1、用户注册时
用户注册密码A、客户端生成一个随机码B,将两者组合到一起,然后MD5加密为C,将随机码B和加密后的C,两者分开提交到服务器,保存到数据库。
2、用户登录时
用户只需要提交密码,提交到服务器后,将密码和该用户数据库中保存的随机码组合,然后MD5加密,验证即可。
问题:这里有一个漏洞,那就是用户登录时,提交的密码,如果是明文,那么很容易被恶意获取。用户提交的信息是有必要加密的,这才是负责任的。
我看了另外一边博文,介绍了腾讯的朋友网,它是怎么加密提交信息的,这里简单说下。
1、将用户密码A加密了三次B,然后与验证码字符C组合,然后进行一次MD5加密成密文D,提交到服务器,这里注意,提交是不包含验证码C的,因为验证码C是服务器生成,提前发送到Client端的。服务器端借助验证码C和用户提交来的密文D,获得密码,进行后续的验证。
这里又有一个问题了,说好的MD5,一般人是没法破解的呢,怎么这里有这个破解步骤呢,其实这是我臆想的步骤,可能它没有破解的,我为什么要破解的,我是想将这两部分整合,所以破解,如果朋友网,没有用salt的加密机制,那么就不需要获得密码A了,哈哈……说的很乱。
总之,可以采取的方案如下:
1、服务器端,用户注册时,保存 (随机码A) 和 (密码B+随机码A进行MD5加密)密文C
2、提交注册或登录信息时,客户端提交(密码M+验证码N进行可逆的方法加密)密文O,服务器端,保存有验证码N,故而,可以逆向运算获得密码M,然后提取数据库中的随机码A,组合后进行MD5加密,与数据库验证。注:虽然密文O是可逆的运算,但是,在提交过程中是不包括验证码N的,加上比较独特的加密算法,基本可以保证安全了,呵呵,除非,服务器端到用户端传输的报文也被截获了,那就没办法了。话说回来,就算获得了密码,那个注册时候生成的随机码A,也是很难获得的。
本文出自 “学海无涯” 博客,请务必保留此出处http://ijustdoit.blog.51cto.com/5682691/1175635
后来,看了别人的web应用都是MD5加密的,感觉很不错,自己也在应用中加入了MD5加密,貌似“不可逆”的,哈哈,看起来也专业了许多,后来听说CSDN用户信息被黑客窃取了,自己也赶紧去换了密码。
今天,无意间看了http://howe.im/(探微·智在未来)的一篇博文《安全密码机制(salt机制)》,才知道了,单纯使用MD5加密,也是不安全的,这里简单说下,所读博文的内容和自己的一点认识吧。
首先,解释下,为什么单纯MD5加密,是不安全的,我们暂且不论MD5是否可以由密文推出明文(有32位密文计算出加密前的密码),也不论用户的密码是否符合很高的安全性(加入大小写字母、数字、特殊字符等),当黑客窃取一个大型网站的数据库信息后,通过MD5加密(而非解密)方法,不断加密一些密码,如123abc,加密后A906449D5769FA7361D7ECC6AA3F6D28,在数据库中搜索,是否存在匹配密文,如果存在,则相应的用户密码就被破解了。不断的穷举密码,加密,匹配。这个速度是很快的,MD5加密很快,数据库匹配可以优化。
然后,说下,博文中介绍的salt机制。
1、用户注册时
用户注册密码A、客户端生成一个随机码B,将两者组合到一起,然后MD5加密为C,将随机码B和加密后的C,两者分开提交到服务器,保存到数据库。
2、用户登录时
用户只需要提交密码,提交到服务器后,将密码和该用户数据库中保存的随机码组合,然后MD5加密,验证即可。
问题:这里有一个漏洞,那就是用户登录时,提交的密码,如果是明文,那么很容易被恶意获取。用户提交的信息是有必要加密的,这才是负责任的。
我看了另外一边博文,介绍了腾讯的朋友网,它是怎么加密提交信息的,这里简单说下。
1、将用户密码A加密了三次B,然后与验证码字符C组合,然后进行一次MD5加密成密文D,提交到服务器,这里注意,提交是不包含验证码C的,因为验证码C是服务器生成,提前发送到Client端的。服务器端借助验证码C和用户提交来的密文D,获得密码,进行后续的验证。
这里又有一个问题了,说好的MD5,一般人是没法破解的呢,怎么这里有这个破解步骤呢,其实这是我臆想的步骤,可能它没有破解的,我为什么要破解的,我是想将这两部分整合,所以破解,如果朋友网,没有用salt的加密机制,那么就不需要获得密码A了,哈哈……说的很乱。
总之,可以采取的方案如下:
1、服务器端,用户注册时,保存 (随机码A) 和 (密码B+随机码A进行MD5加密)密文C
2、提交注册或登录信息时,客户端提交(密码M+验证码N进行可逆的方法加密)密文O,服务器端,保存有验证码N,故而,可以逆向运算获得密码M,然后提取数据库中的随机码A,组合后进行MD5加密,与数据库验证。注:虽然密文O是可逆的运算,但是,在提交过程中是不包括验证码N的,加上比较独特的加密算法,基本可以保证安全了,呵呵,除非,服务器端到用户端传输的报文也被截获了,那就没办法了。话说回来,就算获得了密码,那个注册时候生成的随机码A,也是很难获得的。
本文出自 “学海无涯” 博客,请务必保留此出处http://ijustdoit.blog.51cto.com/5682691/1175635
相关文章推荐
- 网站数据库中“密码加密”方法思考
- 网站数据库中“密码加密”方法思考
- 网站数据库中“密码加密”方法思考
- 详解MYSQL数据库密码的加密方式及破解方法(2)
- java明文密码三重加密方法
- 电信级的RSA加密后的密码的破解方法
- 常见的用户密码加密方式以及破解方法
- 维吉尼亚密码加密过程图解及其破译方法
- [置顶] App安全登录之密码、通讯加密方法(MD5,Base64,RSA,AES)
- 电信级的RSA加密后密码的破解方法
- EXCEL工程加密及工作表保护密码破解方法
- Openfire用户密码加密方法
- 详解MYSQL数据库密码的加密方式及破解方法(3)
- 详解MYSQL数据库密码的加密方式及破解方法
- 接口请求之加密参数(用户名和密码),使用md5方法加密
- access2007、2010设置密码,提示“使用分组加密进行加密与行级别锁定不兼容。行级别锁定将被忽略。”的解决方法
- C#中实现QQ群空间的登录加密密码脚本里的方法
- 常用的密码加密方法
- Phoenix Framework中为数据库用户名和密码加密的方法
- 详解MYSQL数据库密码的加密方式及破解方法(4)