2012-02-04 181 views
0

我目前编码我自己的CMS和我在密码的状态...我可以md5(sha1(密码))?

我想知道如果我能md5一个密码,然后后sha1呢?

像:

$password = md5(sha1(mysql_real_escape_string($_POST['passw']))); 
+2

您可以计算任何字节序列的sha1的md5。你为什么要问? – 2012-02-04 18:07:42

+0

我在问,因为我不想让我的CMS崩溃!我可以吗? – 2012-02-04 18:08:33

+4

只需要注意一点,当它们与像md5,sha1等字母数字散列一起散列时,您不应该逃避密码,它们不能包含任何有害字符 - 并且它可能会更改用户期望的密码。 – 2012-02-04 18:13:24

回答

6

可以md5任何数据,你想,即使它之前散列。

但是,它只会增加碰撞风险,因为您现在正在处理较小的数据集。

你想达到什么目的?

+0

我想为我的密码提供最好的安全性,而不需要1000行! – 2012-02-04 18:09:33

+0

@FrederickMarcoux通过较弱的MD5算法运行SHA1密码不会增加安全性。 – mrlee 2012-02-04 18:16:35

+2

最好的安全性来自散列函数本身的强度。你可以很容易地做的是用[盐](http://highedwebtech.com/2008/04/25/season-your-passwords-with-some-salt/)来提高常用的强度(即通常预先计算的)散列函数值; – hackartist 2012-02-04 18:17:43

1

你显然可以。我不明白你为什么不能。

如果你想要更好的安全性,你应该考虑类似phpass

4

是的,你可以。不,它不合理。

链式散列函数的安全性总是等于或小于最弱算法的安全性。 (sha1($ something))比sha1($ something)更安全:如果你设法打破sha1,你可以免费获得md5,如shat($ something)和sha1($ faked_something)具有相同的值,因此修改它们不会改变任何内容。

1

你可以做到这一点,但它没有真正的好处。如果您通过md5()运行您的密码,您将通过添加密码盐来获得更多安全性。

What is SALT and how do I use it?有更多信息。

你可能听到很多建议的另一点是不要使用MD5SHA1相对较强,您只需将数据库中的密码字段更改为接受40个字符的字符串即可。

1

请确保你在那里添加了一个盐,这使得使用彩虹表对客户/用户的密码要困难得多。

是这样的:

$ hashedPassword = SHA1(。MD5($密码)$盐SHA1($ $盐密码));

如果salt可以是一个很好的长随机字符串本身,或者是在应用程序中不变,或者是每个与用户一起存储的联系人的盐。