是否存在在C#中产生64位散列大小的散列算法?

Mat*_*att 5 c# hash ssis

我需要根据可变长度字符串生成一个Hash值,我可以将其存储在不超过16的字段中(由于供应商要求).

我正在连接几个正在通过C#脚本转换传递的字符串,以便计算哈希值.我受到供应商文件规范的限制,因为哈希的输出不能超过16.

有没有人有什么建议?作为示例,MD5算法的字符串转换具有32的长度.

yfe*_*lum 9

加密函数的设计使得您可以将输出截断为某个大小,并且截断的散列函数仍然是安全的加密散列函数.例如,如果将SHA-512输出的前128位(16字节)应用于某些输入,则前128位是与任何其他128位加密哈希一样强的加密哈希.

解决方案是选择一些加密哈希函数 - SHA-256,SHA-384和SHA-512是不错的选择 - 并将输出截断为128位(16字节).

- 编辑 -

基于注释,当编码为ASCII时,哈希值必须符合16个ASCI字符,解决方案是

  • 首先,选择一些加密哈希函数(SHA-2系列包括SHA-256,SHA-384和SHA-512)
  • 然后,将所选散列函数的输出截断为96位(12字节) - 也就是说,保留散列函数输出的前12个字节并丢弃剩余的字节
  • 然后,对截断的输出进行base-64编码,使其成为16个ASCII字符(128位)
  • 有效地产生一个96位强的加密哈希.