其中使用hash()函数以及原因

时间:2015-03-11 10:37:44

标签: php algorithm security

php string hash ( string $algo , string $data [, bool $raw_output = false ] )中的函数algo =所选散列算法的名称(即" md5"," sha256"," haval160, 4",etc ..),data =要散列的消息。raw_output =设置为TRUE时,输出原始二进制数据。 FALSE输出小写的十六进制。所以,如果我有这个例子

<?php
echo hash('ripemd128', 'The quick brown fox jumped over the lazy dog.');
?>

以上示例输出(看起来完全随机):51d43720fd516108ef5ed20e9031bb865ede861e

所以我想知道这些功能在哪里使用,为什么?还有一种方法或函数可以将输出恢复为原始字符串吗?

3 个答案:

答案 0 :(得分:0)

  

所以我想知道这些功能在哪里使用以及为什么?

它们被用于数字签名算法,数字指纹识别算法,内容可寻址存储,构建可以快速安全地遍历的防篡改数据结构,以及用于抵御复杂性攻击的快速查找。

  

还有一种方法或函数可以将输出恢复为原始字符串吗?

没有。在许多情况下,拥有这种能力会打败哈希点。此外,使用counting argument证明这是不可能的,这是微不足道的。

答案 1 :(得分:0)

它用于数字签名,例如将带有密钥的串联字符串散列到另一个,以检查两个散列字符串是否正确,它就像一个键,以便您获得访问权限。

没有办法解密它,因为它是如何制作的,它是一种单向散列方法。

如果您想要一个加密和解密字符串的方法,请使用mcrypt_encryptmcrypt_decrypt

答案 2 :(得分:0)

这个函数用于计算一种&#34;指纹&#34;对于一些数据。在你的例子中,这将是你的字符串。相同的算法将为相同的输入数据产生相同的散列。如果更改输入数据,则计算的散列将不同。

一种流行的用法是存储密码。因此,您不能以明文形式存储密码,而是使用散列值。

对于你的问题的第二部分:哈希算法是&#34;单向&#34;只(应该是))。所以你无法从散列值恢复输入数据。