2010-11-07 73 views
2

我想在服务器端应用程序中压缩或压缩来自MD5或SHA1的结果散列值,以便客户端可以对其进行解压缩或删除它,这可能吗?它是我的应用程序的可用性问题。如何减少散列值的长度?

+0

您如何通过该值? – Kobi 2010-11-07 05:39:22

+0

你可以给出一个商业理由来做到这一点? – jcolebrand 2010-11-07 05:44:58

+0

例如:你要发送你的一次性密码,这是一个散列值的结果,这对用户来说很难写32个字节...... – 2010-11-07 07:54:13

回答

3

不,无法压缩散列值。通过设计它们的位是高度随机的并且具有最大的熵,所以没有冗余来压缩。

如果你想哈希值更易于读取,用户可以使用不同的技巧,如:

  • 显示更少的数字。而不是32位数字只显示16.

  • 使用不同的基地。例如,如果使用基座62使用所有的大写和小写字母加数字0-9的数字,那么你可以示出使用22个字母+数字表示与32位十六进制数字的128位散列:

    日志(2 )≈ 21.5

  • 添加空格或标点符号。您通常会看到用AX7T4-BZ41O-JK3FF-QOZ96等短划线打印的CD密钥。用户阅读这个数字比20位数字全部卡在一起更容易。

1

哈希值非常短;试图压缩这些(非常随机和高度变化的)值是困难和低效的。如果您想节省空间,截断值可能会有所帮助,但请记住,如果您这样做,则会增加碰撞空间(并减少关键空间)。