楚辞#1:用户密码的朴素加密

去年的一篇文章提到这样给用户的密码进行加密:采用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加密:第一次在客户端,后两次在服务器端。当然,最后一次也可能有些多余 –_-||
不管最后的代码如何,只要保证流程不变,就没问题了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值