字符串的良好哈希函数

2022-08-31 06:35:03

我试图为字符串想出一个好的哈希函数。我在想,总结字符串中前五个字符的unicode值可能是一个好主意(假设它有五个,否则在它结束的地方停止)。这是一个好主意,还是一个坏主意?

我在Java中这样做,但我不会想象这会有太大的区别。


答案 1

通常哈希不会做求和,否则将具有相同的哈希。stoppots

并且您不会将其限制为前n个字符,因为否则房屋和房屋将具有相同的哈希值。

通常,哈希值并将其乘以素数(使其更有可能生成唯一哈希),因此您可以执行以下操作:

int hash = 7;
for (int i = 0; i < strlen; i++) {
    hash = hash*31 + charAt(i);
}

答案 2

如果这是一个安全的东西,你可以使用Java加密:

import java.security.MessageDigest;

MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(stringToHash.getBytes());
String stringHash = new String(messageDigest.digest());