专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 软件架构设计

【chuci.info札记】用户密码的朴素加密

发布时间:2011-06-20 02:11:19 文章来源:www.iduyao.cn 采编人员:星星草
【chuci.info笔记】用户密码的朴素加密

去年的一篇文章提到这样给用户的密码进行加密:采用HASH+SALT(一人一密,一站一密:即在用户密码中加入用户信息和站点信息,再生产MD5之类的单向HASH密码)
地址:http://news.csdn.net/a/20111229/309882.html

前提

0、基本加密算法不变:MD5/SHA512。这里是指后者,对字符串加密后的密文,长度为128。
1、“朴素”的意思是对salt进行复杂化处理,不再引入其它加密算法。
2、不关心最终结果是否是全站唯一的--因为不是生成ID。

说明

用户注册时,生成32位长度的ID(.net中去掉连接符"-"的GUID),和32位长度的salt(与ID不同)。
用户密码明文pwdtxt,客户端加密为shaPwd。
【服务器端】
对salt进行处理,即对站点地址、用户邮箱、用户ID、用户的salt进行拼接(M1。不一定要全部拼接)后加密,得到shaSalt。
这样服务器端会拿到两个都是长度为128的sha结果:shaPwd和shaSalt。将这两个字符串进行一系列处理(M2。),最后得到长度仍为128的字符串保存到数据库的密码字段。--之所以要求是128位,只是为了混淆暴库后的结果而已。

上面的M1和M2是灵活处理的,只要最后的算法保持不变,就没事。
M1:四个部分,可以选择2--4个,顺序也可以进行各种拼接,如邮箱是a@y.com,可以拼为 [站点]a[salt]@y.com,诸如此类。
M2:其实思考这部分是很有意思的,提示几种处理方式:先拼接shaPwd和shaSalt,再从中选择128位。
M2-0:这里只拿shaPwd+shaSalt这种最简单的拼接举例。
M2-1:shaPwd+shaSalt得到长度为256的字符串,取所有的奇/偶数位字母,作为128位的结果。
M2-2:shaPwd+shaSalt得到长度为256的字符串,按斐波那契序列,依次选取对应位的字母,索引大于255的时候对255取余,最后选择128位作为结果。
(上面两种都是:对拼接后的字符串,按某种序列选择)
M2-3:256正好是16的平方。也就是可以假设一个16x16的矩阵,将这256个字母按某种顺序填充进去或者直接填充进去。矩阵是很形象的,从中选择128个元素也就变得有意思了,方式也越发多样。
M2-准备保存:将得到的128位字符串进行SHA512解密,最后将128位密文保存到数据库对应字段。

结束语

上面的过程总共进行了3次SHA512加密:第一次在客户端,后两次在服务器端。当然,最后一次也可能有些多余 –_-||
不管最后的代码如何,只要保证流程不变,就没问题了。

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: