fee*_*0de 1 security hash cryptography
是否有一个函数生成一个具有我想要的精确长度的哈希?我知道MD5总是有16个字节.但我想定义生成的哈希的长度.
例:
hash('Something', 2) = 'gn'
hash('Something', 5) = 'a5d92'
hash('Something', 20) = 'RYNSl7cMObkPuXCK1GhF'
Run Code Online (Sandbox Code Playgroud)
当长度增加时,结果应该更安全,重复.
即将推出的SHAKE256(或安全级别为128位而不是256位的SHAKE128),即所谓的可扩展输出功能(XOF),正是您所需要的.它将与SHA3一起定义.已有在线草案.
如果您现在需要已建立的解决方案,请遵循CodesInChaos建议并在最大64字节足够时截断SHA512,否则使用原始数据的散列输出生成流密码.
技术免责声明:在512bit的输出长度之后,"防止重复的安全性"(抗冲击性)不再随着输出的增加而增加,就像SHAKE256一样,它已经达到了原始支持的冲突(256bit)的最大安全级别.(注意,由于生日悖论,理想散列函数的安全级别,输出长度为n位,对冲突只有n/2位.)任何更高的安全级别无论如何都是毫无意义的(可能256位已经是一种过度杀伤)我们的太阳系不能提供足够的能量甚至从0到2 ^ 256.
请不要将"安全级别"与密钥长度混淆:使用对称算法,人们通常期望安全级别等于密钥大小,但使用非对称算法时,这些数字完全不相关:512位RSA加密方案远不如128位AES安全(即512比特的RSA模数可以通过蛮力来计算).
如果加密原语试图达到"n比特的安全级别",则意味着应该没有对其进行的攻击比2 ^ n操作更快.