需要帮助。我不擅长散列,只是刚开始用PHP编程,目前需要散列一些字符串,但要求它是唯一的。发现OpenSSL可以使用SHAKE128进行散列,但不需要选择输出的长度。注意,默认情况下,每个带有openssl_digest哈希输出的shake128函数都是256个字符,我是否可以只使用前20个字符,因为我只注意到最后几个字符随每次长度的变化而被追加?shake128散列"hello“示例:
5字节- 8eb4b6a932
6字节- 8eb4b6a932f2
7字节- 8eb4b6a932f280
8字节- 8eb4b6a932f28033
16字节- 8eb4b6a932f280335ee1a279f8c208a3
感谢你的洞察力。谢谢。
发布于 2020-04-01 15:41:46
是的,您可以这样做,只要您承诺不使用哈希用于任何其他目的,如果较短的哈希将泄漏将受到损害。然而,如果您需要少于128位,那么您最好使用SHA-3并截断它;这取决于SHAKE128是否优于SHA-3-256;毕竟它们都依赖于相同的基础海绵功能。
请注意,SHAKE128或SHA-3-256都不输出任何字符.它们生成二进制位,或者--对于大多数实现来说--字节。您正在显示的十六进制字符只是这些字节的表示。
https://crypto.stackexchange.com/questions/79591
复制相似问题