Java 是否可以将sh1令牌的长度限制在10以内?
如何将sh1哈希的长度减少到10位以下?可能吗 我尝试了以下代码Java 是否可以将sh1令牌的长度限制在10以内?,java,Java,如何将sh1哈希的长度减少到10位以下?可能吗 我尝试了以下代码 /** * * @param id * @return */ public static final String getGeneratedId(final String id) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new Objec
/**
*
* @param id
* @return
*/
public static final String getGeneratedId(final String id) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(id);
oos.close();
MessageDigest m = MessageDigest.getInstance("SHA1");
m.update(baos.toByteArray());
return new BigInteger(1, m.digest()).toString(16);
} catch (Exception e) {
ICAMPPLogger.logException(CLASSNAME, "error in creating uuid" + e);
ICAMPPUtils.getStackTraceToString(e);
return BigInteger.ZERO.toString();
}
}
public static void main(String[] args) {
String token = getGeneratedId("testing");
System.out.println(token);
}
ouput is : 1305340859400297508806692338645894167742475232778
But i would like to limit length to less than 10 . is it posssible
SHA1产生160位数据,即20字节。如果将其表示为十六进制,则需要40个字符 这一切都在编码中。您可能会找到一些需要少于40个字符的编码
检查此项:
getGeneratedId(“foobar”)。子字符串(0,10)
——非常简单。当然,这样做会增加冲突的可能性。在不创建UUID
的情况下,谈论UUID
也是一种误导。而且不应该使用Java序列化将字符串转换为字节数组。只需使用string.getBytes(StandardCharsets.UTF8)。@Erwin Bolwidt:Substring。。非常错误的事情。那我怎么才能从那个令牌中夺回我给予的绳子呢。那不是我mean@PRASANTHMV根据定义,加密哈希不允许从哈希中获取原始文本。这就是散列的全部原理。不管你是否使用它的子串,都不会改变任何事情。