我需要根据可变长度字符串生成一个哈希值,该字符串可以存储在不超过 16 的字段中(由于供应商要求)。
我将通过 C# 脚本转换传递的几个字符串连接在一起,以计算哈希值。我受到供应商文件规范的限制,因为哈希的输出不能超过 16 个字符。
有没有人有什么建议?例如,MD5 算法(128 位)的字符串转换的十六进制编码长度为 32 个字符。
加密函数的设计使得您可以将输出截断到一定大小,并且截断的哈希函数仍然是安全的加密哈希函数。例如,如果将 SHA-512 输出的前 128 位(16 字节)应用于某些输入,则前 128 位是加密哈希,其强度与任何其他 128 位加密哈希相同。
解决方案是选择一些加密哈希函数 - SHA-256、SHA-384 和 SHA-512 是不错的选择 - 并且截断输出 https://stackoverflow.com/questions/3026762/is-it-okay-to-truncate-a-sha256-hash-to-128-bits至 128 位(16 字节)。
--EDIT--
根据注释,当编码为 ASCII 时,哈希值必须在 16 个 ASCI 字符之内,解决方案是
- 首先,选择一些加密哈希函数(SHA-2 系列包括 SHA-256、SHA-384 和 SHA-512)
- 然后,将所选哈希函数的输出截断为 96 位(12 字节),即保留哈希函数输出的前 12 个字节并丢弃其余字节
- 然后,将截断的输出进行 Base-64 编码为 16 个 ASCII 字符(128 位)
- 有效地产生 96 位强的加密哈希。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)