我目前编码我自己的CMS和我在密码的状态...我可以md5(sha1(密码))?
我想知道如果我能md5
一个密码,然后后sha1
呢?
像:
$password = md5(sha1(mysql_real_escape_string($_POST['passw'])));
我目前编码我自己的CMS和我在密码的状态...我可以md5(sha1(密码))?
我想知道如果我能md5
一个密码,然后后sha1
呢?
像:
$password = md5(sha1(mysql_real_escape_string($_POST['passw'])));
可以md5
任何数据,你想,即使它之前散列。
但是,它只会增加碰撞风险,因为您现在正在处理较小的数据集。
你想达到什么目的?
我想为我的密码提供最好的安全性,而不需要1000行! – 2012-02-04 18:09:33
@FrederickMarcoux通过较弱的MD5算法运行SHA1密码不会增加安全性。 – mrlee 2012-02-04 18:16:35
最好的安全性来自散列函数本身的强度。你可以很容易地做的是用[盐](http://highedwebtech.com/2008/04/25/season-your-passwords-with-some-salt/)来提高常用的强度(即通常预先计算的)散列函数值; – hackartist 2012-02-04 18:17:43
你显然可以。我不明白你为什么不能。
如果你想要更好的安全性,你应该考虑类似phpass。
是的,你可以。不,它不合理。
链式散列函数的安全性总是等于或小于最弱算法的安全性。 (sha1($ something))比sha1($ something)更安全:如果你设法打破sha1,你可以免费获得md5,如shat($ something)和sha1($ faked_something)具有相同的值,因此修改它们不会改变任何内容。
你可以做到这一点,但它没有真正的好处。如果您通过md5()
运行您的密码,您将通过添加密码盐来获得更多安全性。
What is SALT and how do I use it?有更多信息。
你可能听到很多建议的另一点是不要使用MD5
。 SHA1
相对较强,您只需将数据库中的密码字段更改为接受40个字符的字符串即可。
请确保你在那里添加了一个盐,这使得使用彩虹表对客户/用户的密码要困难得多。
是这样的:
$ hashedPassword = SHA1(。MD5($密码)$盐SHA1($ $盐密码));
如果salt可以是一个很好的长随机字符串本身,或者是在应用程序中不变,或者是每个与用户一起存储的联系人的盐。
您可以计算任何字节序列的sha1的md5。你为什么要问? – 2012-02-04 18:07:42
我在问,因为我不想让我的CMS崩溃!我可以吗? – 2012-02-04 18:08:33
只需要注意一点,当它们与像md5,sha1等字母数字散列一起散列时,您不应该逃避密码,它们不能包含任何有害字符 - 并且它可能会更改用户期望的密码。 – 2012-02-04 18:13:24