【发布时间】:2017-11-05 17:55:49
【问题描述】:
我正在尝试将 md5 哈希转换为 long,就像在 python 中一样,
>>> int(hashlib.md5("abc").hexdigest(),16) 191415658344158766168031473277922803570L
当我消化“abc”时,我得到(十六进制):“0X900150983CD24FB0D6963F7D28E17F72”
在 Java 中进行这种哈希转换的正确方法是什么?
public static void main(String[] args) {
byte[] md5hex = DigestUtils.md5("abc");
String hex = new String(Hex.encodeHex(md5hex));
System.out.println(hex);
long lv = Long.parseLong("0X" + hex.toUpperCase(), 16);
System.out.println(lv);
int hext = Integer.parseInt("12346789", 16);
System.out.println(hext);
}
【问题讨论】:
-
一个 MD5 的长度为 16 个字节。
int可以容纳 4 个字节,long 可以容纳 8 个字节。所以没有正确的方法将 md5 哈希转换为 long 或 int。 -
什么异常我得到了异常 那会是什么?
-
我可以在 python 中做到这一点:>>> int(hashlib.md5("abc").hexdigest(),16) 191415658344158766168031473277922803570L