我需要计算一个字符串���哈希码,并将其存储到一个“long”变量中。
MD5和SHA1生成的哈希码长度超过64位(MD5-128位,SHA1-160位)。
有什么好的想法吗?
谢谢,
Doron
我需要计算一个字符串���哈希码,并将其存储到一个“long”变量中。
MD5和SHA1生成的哈希码长度超过64位(MD5-128位,SHA1-160位)。
有什么好的想法吗?
谢谢,
Doron
我正在使用这个(Java):
public class SimpleLongHash {
final MessageDigest md;
//
public SimpleLongHash() throws NoSuchAlgorithmException {
md = MessageDigest.getInstance("MD5");
}
//
public long hash(final String str) {
return hash(str.getBytes());
}
public long hash(final byte[] buf) {
md.reset();
final byte[] digest = md.digest(buf);
return (getLong(digest, 0) ^ getLong(digest, 8));
}
//
private static final long getLong(final byte[] array, final int offset) {
long value = 0;
for (int i = 0; i < 8; i++) {
value = ((value << 8) | (array[offset+i] & 0xFF));
}
return value;
}
}
如果将前64位和后64位进行XOR操作,导致碰撞的概率会是多少?