@
Semidio 如果真按LZ说的那么简单,王晓云的院士就应该给LZ了。不过LZ说的一个观点是对的,任何密码只有给足够的时间就能被破解即伯格夫斯基定律。但是时间本身在密码学领域里就是一个成本,任何密码只有在有效时间内被破解才能称为成功破解。实际上采用LZ所说的暴力破解的方法,时间长短并不取决于加密算法的优越性,更大程度上取决于密码的长度,如果密码为1位,在牛B的加密算法也会在短时间内被暴力破解。
@
yyfearth为防止碰撞,现在稍微有点安全需求的数据都是采用变换算法MD5.以PHP为例,我见过的大概有5种。
变换一:循环MD5
最容易理解的变换就是对一个密码进行多次的MD5运算。自定义一个函数,它接受$data和$times两个形参,第一个是要加密的密码,第二个是重复加密的次数。
变换二:密文分割MD5
尽管用户的密码是不确定的字符串,但是只要经过一次MD5运算后,就会得到一个由32个字符组成的字符串,这时可以再针对这个定长字符串变换。有点BT的算法是,把这段密文分割成若干段,对每段都进行一次MD5运算,然后把这堆密文连成一个超长的字符串,最后再进行一次MD5运算,得到仍然是长度为32位的密文。
变换三:附加字符串干涉
在加密过程的一个步骤中,附加一个内容确定的字符串(比如说用户名),干涉被加密的数据。不可以用随机字串,因为这样会使原算法无法重现。这种算法在某些情况下是很具有优势的,比如说用于大量的用户密码加密,可以把用户名作为附加干涉字串,这样攻击者就算知道你的算法,也很难从他们手中的字典中一下子生成海量的对照表,然后大量地破译用户密码,只能有针对性的穷举为数不多的用户。
变换四:大小写变换干涉
由于PHP所提供的md5()函数返回的密文中的英文字母全部都是小写的,因此我们可以把它们全部转为大写,然后再进行一次MD5运算。
变换五:字符串次序干涉
把MD5运算后的密文字符串的顺序调转后,再进行一次MD5运算。
还有更BT的采用5种混合玩法,但是服务器开销很大。只能用BT来形容。