整数哈希到字符串值

时间:2010-11-25 11:24:06

标签: java hash

我想计算字符串的哈希值,但哈希值应该是一个数字(长整数)。

换句话说,我想计算字符串的整数哈希值。 共谋阻力不在乎。

有没有办法将SHA-256的MessageDigest转换为数字。

我正在使用Java来实现这一目标。

7 个答案:

答案 0 :(得分:1)

尝试调用hashCode()方法。它已经实现并完全符合您的要求。

答案 1 :(得分:1)

最明显的是hashCode()

上有一个String方法

至于将MessageDigest转换为数字,您可以再次使用hashCode或从摘要中取出byte数组并将其压缩到您想要的任何大小,整数,长整数或其他任何大小(比如)xor。

public int compactDigest(MessageDigest digest) {
    byte [] byteArr = digest.digest();
    // +3 since conversion to int array with divide length by four.
    // and we don't want to lose any bytes.
    ByteBuffer bytes = ByteBuffer.allocate(byteArr.length + 3);
    bytes.put(byteArr);
    bytes.rewind();

    IntBuffer ints = bytes.asIntBuffer();
    int compactDigest = 0;
    for (int i = 0; i < ints.limit(); ++i) {
      compactDigest ^= ints.get(i);
    }

    return compactDigest;
}

答案 2 :(得分:0)

String有一个hashcode方法,就像任何其他Java类一样,它将字符串转换为数字。有关其使用的确切算法,请参阅此方法的documentation

答案 3 :(得分:0)

java中的每个对象都有hashCode()方法。您可以覆盖它并指定自己的逻辑。查看examples

答案 4 :(得分:0)

Sha Hash有256位,例如

"364b7e70a9966ef7686ab814958cd0017b7f19147a257d40603d4a1307662b42"

这将超出long和integer的范围。 您可以使用new BigInteger( hash, 16 );进行十进制表示。

public static void main(String[] args) throws NoSuchAlgorithmException {
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        digest.update("string".getBytes() );
        byte[] hash = digest.digest();
        BigInteger bi = new BigInteger( hash );
        System.out.println( "hex:" + bi.toString(16) + "\r\ndec:" + bi.toString() );
    }

答案 5 :(得分:0)

请在此处找到:http://pastebin.com/j6Cffkcp;

我但它只返回字符串。

答案 6 :(得分:0)

使用JCE类创建的加密哈希(在您的情况下为MessageDigest)本质上是一个字节序列(SHA-256为256位)。如果您希望存储和管理这些数字,您需要将它们转换为BigInteger或BigDecimal对象(给定摘要的长度)。

并不总是计算String对象的加密哈希值,并且通常是为了对秘密进行单向加密。如果您将哈希用于其他目的,尤其是为了确保字符串之间存在某种独特性(这在将这些对象存储在哈希映射中时很重要),最好使用由{{3计算的哈希值}}