我有一把钥匙,可以被认为是秘密的。我正在传递一个字符串,我必须假设用户能够篡改它,我想验证它没有被篡改。
我可以使用mcrypt_encrypt
之类的内容存储结果,mcrypt_decrypt
在阅读时,或者我可以使用$hash = hash('sha256', $key . $string);
并存储$hash . $string
,然后验证哈希值。问题是:a)速度 - 有没有一个基准比较各种加密算法速度与散列的解密速度b)如果我散列几个都具有相同前缀的字符串,是否会削弱散列?
答案 0 :(得分:2)
愚蠢的我,使用键hash_hmac
进行散列是我需要使用的功能。
答案 1 :(得分:0)
问题的第二部分:不,它不应该削弱哈希值。如果用户想要篡改字符串,则必须找到另一个字符串,该字符串具有相同的值。散列的设计使得即使是非常相似的字符串也会散列到不同的值。
对于第一个问题,它取决于你的机器和其他一些东西,应该很容易交换几个不同的哈希算法并为你的特定机器运行一些基准。