创建字符串的DIGITAL哈希。 Java的

时间:2017-11-27 11:10:20

标签: java hash

我从Web服务接收对象流。客户端的限制是这些对象不应保存在数据库中 - 因此在这种情况下,我必须为每个对象创建自己的ID以供将来识别。

其中一种方法是使用SHA256算法根据对象属性的串联创建哈希。 哈希可能是这样的:

  

07993ae34bf09e0afdfac7dd728b326095dcf4f68fa1d09e2e8cfb57f214bc5d

但是,我使用仅接受数字身份证(长型)的外部客户端系统。

是否有任何方法/算法可以从字符串创建数字哈希​​?

P.S。 Addtition。我最后需要的是接收对象类型为Long的ID。但是,不将它们保存到数据库中,因此仅基于其属性的连接。我会考虑创建散列仅由数字组成,并且将应用于Long类型。但是,如果有一些切割方式,我会很感激他们。

1 个答案:

答案 0 :(得分:0)

要从哈希接收长号,请使用以下函数:

private Long createId(String name) throws Exception {
    Long id = new BigInteger(getHash(name), 16).longValue();

    return id;
}

只是为了展示如何创建哈希:

import org.apache.commons.codec.binary.Hex;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

private String getHash(String s) throws Exception {

    Mac mac = Mac.getInstance("HMACSHA256");
    mac.init(new SecretKeySpec("Password".getBytes("UTF-8"), ""));

    byte[] ret = mac.doFinal(s.getBytes("UTF-8"));

    return Hex.encodeHexString(ret);
}