我从Web服务接收对象流。客户端的限制是这些对象不应保存在数据库中 - 因此在这种情况下,我必须为每个对象创建自己的ID以供将来识别。
其中一种方法是使用SHA256算法根据对象属性的串联创建哈希。 哈希可能是这样的:
07993ae34bf09e0afdfac7dd728b326095dcf4f68fa1d09e2e8cfb57f214bc5d
但是,我使用仅接受数字身份证(长型)的外部客户端系统。
是否有任何方法/算法可以从字符串创建数字哈希?
P.S。 Addtition。我最后需要的是接收对象类型为Long的ID。但是,不将它们保存到数据库中,因此仅基于其属性的连接。我会考虑创建散列仅由数字组成,并且将应用于Long类型。但是,如果有一些切割方式,我会很感激他们。
答案 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);
}