哈希函数获得有限长度的结果

Kee*_*erl 1 .net c# vb.net asp.net

我需要哈希一个数字(大约22位),结果长度必须小于12个字符.它可以是数字或混合字符,并且必须是唯一的.(输入的数字也是唯一的).

例如,如果输入的数字是000000000000000000001,则结果应类似于2s5As5A62s.

我查看了典型的,如MD5,SHA-1等,但它们给出了很长的结果.

Mic*_*ray 6

您的问题的问题是输入大于输出和唯一.如果你期望一个独特的输出,它也不会发生.这背后的原因是,如果你有一个22位数字(10 ^ 22种可能性)的输入空间和一个长度为11位(16 ^ 11种可能性)的十六进制数字的输出空间,你最终会得到比输出可能性.

下图显示您需要一个19个十六进制数字的输出空间和一个完美的一对一功能,否则您将经常发生冲突(超过50%的时间).我认为这是你不想要的,但你没有指明.

在此输入图像描述

由于无法完成您的工作,我建议您重新考虑您的设计或使用校验和,例如循环冗余校验(CRC).CRC-64将产生64位输出,当使用任何base64算法编码时,将为您提供您想要的内容.这不提供像SHA-1这样的加密强度,因此不应该在与信息安全相关的任何事情中使用它.

但是,如果您能够更改标准以允许长哈希输出,那么我强烈建议您查看SHA-512,因为它将提供高质量的输出,并且复制的可能性极低.我的意思是,没有两个输入在算法历史中找到相同的哈希值.

如果这两个建议对你来说都不是很好,那么你的最后一个选择可能就是输入数据只有base64.它将以最佳方式使用标准英语字母表示您的数据,从而尽可能减少字符数,同时保留输入数据的完整表示.这不是哈希函数,而只是一种编码二进制数据的方法.