六角形字符串上的SHA1哈希值

时间:2010-12-02 07:36:42

标签: java security sha1

我正在尝试使用Java安全库对十六进制字符串表示的数字进行哈希处理。意思是,如果我有字符串“AABBCCDD”我想要哈希它不是因为这是一个ascii输入,它是0x65,0x65,0x66,0x66,0x67,0x67,0x68,0x68,但是作为四个字节 - 0xAA,0xBB, 0xCC,0xDD。 我设法用低值来做,例如“112233445566”(因为字节是用Java签名的),但是因为值很高而失败了。

有人知道如何实施这样的事情吗?

谢谢, 本雅明

2 个答案:

答案 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 hereApache Commons Codec用于此转换和其他转换。虽然Java字节确实已签名,但您将获得与无符号相同的位模式,因此它们将具有相同的方式。除非您在字节值上执行自己的算术/位移,否则通常忽略字节用Java签名的事实。