PHP密码保护:从md5到sha512

7

如何在PHP中使用sha512函数?

我能用sha512函数替换所有的md5函数吗?

我需要下载什么东西吗?如果需要,是什么?

有人能提供一些例子吗?

3个回答

6
在PHP版本大于等于5.1的环境下,hash()函数可以生成sha512哈希值。你可以通过调用hash_algos()函数来验证这一点,该函数列出了支持的哈希算法。
例如,你可以使用以下代码:
$sha512 = hash('sha512', "Hello, World!");
var_dump($sha512);

您将获得:

string '374d794a95cdcfd8b35993185fef9ba368f160d8daf432d08ba9f1ed1e5abe6cc69291e0fa2fe0006a52570ef18c19def4e617c33ce52ef0a6e5fbe318cb0387' (length=128)

在我的系统上,以下代码部分为:
$supported = hash_algos();
var_dump($supported);

表明支持42种哈希算法:

array
  0 => string 'md2' (length=3)
  ...
  6 => string 'sha384' (length=6)
  7 => string 'sha512' (length=6)
  8 => string 'ripemd128' (length=9)
  9 => string 'ripemd160' (length=9)
  ...
  40 => string 'haval224,5' (length=10)
  41 => string 'haval256,5' (length=10)



此外,如果您使用的是PHP版本大于等于5.3,您应该可以使用openssl_digest()函数:

$sha512 = openssl_digest("Hello, World!", 'sha512');
var_dump($sha512);

(是的,参数顺序与hash()不同 - 这就是PHP的魔力...)

而要获取支持的算法列表,则可以使用openssl_get_md_methods()

在我的系统上,此函数可给出22种支持的算法。


如果你的软件需要在多台机器上运行,请确保它能够在所有机器上使用。 - TheJacobTaylor
你能提供一个简单的密码登录示例吗?如果可以的话 :) - PeAk
1
这有点比较复杂 ^^ 但基本思路是:获取用户输入的密码;;进行哈希处理;;将该哈希值与数据库中存储的用于提供登录的哈希密码进行比较;;如果匹配,则表示OK,您可以在$ _SESSION中设置某些内容以指示用户已登录。 - Pascal MARTIN

0

校验和用于生成校验和,HMAC 可能是生成需要安全哈希的字符串的加盐哈希的首选方式。

hash_hmac('sha512', 'important string', 'salt');

-2

只是出于好奇,你为什么想要替换MD5函数?

它相对高效。如果你添加盐值,它就真的很麻烦去反向工程化。某人必须对所有密码进行暴力编码,寻找匹配项。没有盐值,通用的短字符串小写所有字母串已经被破解并存储在数据库中。

我只会添加一个盐值并称之为好的。


1
MD5已被密码学破解:http://www.google.com/search?q=md5+cryptographically+broken - Jacco
2
是的,MD5很快。但这正是你不想用于哈希密码的原因。 - Jacco
2
(为了清晰起见,我已经对此进行了投票,因为MD5适用于密码哈希,而不是因为它需要编辑。) - halfer
1
同时,@halfer,您不需要一个高效的算法...因为预先计算的彩虹表和GPU暴力破解在10年前就已经存在了。此外,盐并不能改变所有这些,除非您将盐存储在哪里? - Raymond Nijland
1
据我所知,盐可以留在表中,并且可以预期被攻击者知道。关键不在于这些可以保密 - 这些只是为了防止使用预先存在的彩虹表。正如你所说,这里的主要防御措施是减缓攻击者的速度。 - halfer
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接