我想散列一个数字,用十六进制字符串表示的Java安全库。意思是,如果我有字符串“AABBCCDD”,我想散列它不是因为这是一个ascii输入,它是0x65,0x65,0x66,0x66,0x67,0x67,0x68,0x68,但作为四个字节 - 0xAA,0xBB, 0xCC,0xDD。 我设法用较低的值做到这一点,例如“112233445566”(因为字节是用Java签名的),但是失败的数值很高。SHA1哈希十六进制字符串
有人知道如何实施这样的事情吗?
感谢, 本雅明
我想散列一个数字,用十六进制字符串表示的Java安全库。意思是,如果我有字符串“AABBCCDD”,我想散列它不是因为这是一个ascii输入,它是0x65,0x65,0x66,0x66,0x67,0x67,0x68,0x68,但作为四个字节 - 0xAA,0xBB, 0xCC,0xDD。 我设法用较低的值做到这一点,例如“112233445566”(因为字节是用Java签名的),但是失败的数值很高。SHA1哈希十六进制字符串
有人知道如何实施这样的事情吗?
感谢, 本雅明
首先转换十六进制为byte[]
例如使用这样的:Convert a string representation of a hex dump to a byte array using Java?
它使用
byte[] data = hexStringToByteArray(hexData);
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(data, 0, data.length);
byte[] sha1hash = md.digest();
基本上你只需要找到一个十六进制解析器 - 有大量各地,拥有one example here,或Apache Commons Codec这和其他的转换。虽然Java字节确实已签名,但您将得到与未签名相同的位模式,因此它们将采用相同的方式。除非你在字节值上执行自己的算术/位移,否则通常忽略字节用Java签名的事实。
谢谢,正如我写给gleber(上图),我已经实现了你的第一个选项。 – MByD 2010-12-02 08:09:21
这些不说,采取的方法后'的byte []`作为输入?我不太确定我是否明白问题所在。 – 2010-12-02 07:39:11
是的。我假设我在执行之前犯了一些错误。 – MByD 2010-12-02 08:10:13