【发布时间】:2013-08-02 19:38:43
【问题描述】:
可能重复How to reduce a bigger string in smaller string in C++? Probably by hashing?
我尝试在 java 中为 bmp 文件创建自己的校验和算法。因此,对于 54 字节(432 位)的标头,生成的校验和为 378 位长。
如何将其缩减为更小的数据集?关于如何实现我自己的哈希算法的任何建议? (条件之一是不使用现有算法)。
我使用了一个非常简单的哈希函数。
public static String hash_function(String bmpBytes) {
String hash = "";
int left_shift = Integer.parseInt(bmpBytes);
int right_shift = Integer.parseInt(bmpBytes);
left_shift = left_shift << 2;
right_shift = right_shift >> 2;
int xor = left_shift ^ right_shift;
hash += Integer.toString(xor);
return hash;
}
可能的答案:
我找到了一种通过生成“n”个随机二进制位来缩短字符串的方法,其中
n < sizeOf(hash) 然后做一个hash % n-bits。
如果这是一个有效的答案,请告诉我,我会将问题标记为已回答。
【问题讨论】:
-
你需要它做什么?短散列是使用 0 位。您需要的最少位数是多少?
-
我已经更新了我的帖子以包含我的哈希函数。请检查。
-
您必须更精确地满足您的要求,算法
return ""满足您所说的:字符串被缩减为更小的字符串。算法是否应该是安全的、可逆的等。 -
但不清楚你为什么写这个。你能说出你的要求是什么吗?顺便说一句,将哈希存储为文本是不寻常的,因为它通常是二进制值。
-
文本实际上是为BMP文件生成的校验和。我的目标是获取 BMP 文件的 54 字节标头并将其与校验和进行匹配,以查看它是否已损坏。