我正在尝试使用Java安全库对十六进制字符串表示的数字进行哈希处理。意思是,如果我有字符串“AABBCCDD”我想要哈希它不是因为这是一个ascii输入,它是0x65,0x65,0x66,0x66,0x67,0x67,0x68,0x68,但是作为四个字节 - 0xAA,0xBB, 0xCC,0xDD。 我设法用低值来做,例如“112233445566”(因为字节是用Java签名的),但是因为值很高而失败了。
有人知道如何实施这样的事情吗?
谢谢, 本雅明
答案 0 :(得分:6)
首先使用例如Convert a string representation of a hex dump to a byte array using Java?
将十六进制转换为byte[]
使用后
byte[] data = hexStringToByteArray(hexData);
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(data, 0, data.length);
byte[] sha1hash = md.digest();
答案 1 :(得分:2)
基本上你只需要找到一个十六进制解析器 - 周围有很多,one example here或Apache Commons Codec用于此转换和其他转换。虽然Java字节确实已签名,但您将获得与无符号相同的位模式,因此它们将具有相同的方式。除非您在字节值上执行自己的算术/位移,否则通常忽略字节用Java签名的事实。