Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 十六进制字符串上的SHA1哈希_Java_Security_Sha1 - Fatal编程技术网

Java 十六进制字符串上的SHA1哈希

Java 十六进制字符串上的SHA1哈希,java,security,sha1,Java,Security,Sha1,我试图散列一个数字,用Java安全库中的十六进制字符串表示。也就是说,如果我有字符串“AABBCCDD”,我不想散列它,因为这是一个ascii输入,即0x65、0x65、0x66、0x66、0x67、0x67、0x68、0x68,而是作为四个字节—0xAA、0xBB、0xCC、0xDD。 我设法用诸如“112233445566”之类的低值(因为字节是用Java签名的)来完成,但用高值失败了 有人知道如何实现这样的事情吗 谢谢, Binyamin基本上,您只需要找到一个十六进制解析器——有很多用于

我试图散列一个数字,用Java安全库中的十六进制字符串表示。也就是说,如果我有字符串“AABBCCDD”,我不想散列它,因为这是一个ascii输入,即0x65、0x65、0x66、0x66、0x67、0x67、0x68、0x68,而是作为四个字节—0xAA、0xBB、0xCC、0xDD。 我设法用诸如“112233445566”之类的低值(因为字节是用Java签名的)来完成,但用高值失败了

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

谢谢,
Binyamin

基本上,您只需要找到一个十六进制解析器——有很多用于此转换和其他转换的解析器。虽然Java字节确实是有符号的,但您将得到与无符号相同的位模式,因此它们的方式相同。除非您对字节值执行自己的算术/位移位,否则通常可以忽略字节是用Java签名的事实。

首先使用以下示例将十六进制转换为
字节[]

使用后

byte[] data = hexStringToByteArray(hexData);
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(data, 0, data.length);
byte[] sha1hash = md.digest();

这不是一个将
字节[]
作为输入的方法吗?我不太确定我是否理解问题所在。是的。我假设我以前在实现中犯过一些错误。实际上,我以前已经为RC4实现了hexStringToByteArray(),但出于某种原因,我忘记了它的存在,并尝试以另一种方式解决它(更复杂、更低效)。谢谢。为什么你要创建一个字节数组,然后有效地丢弃它?当你调用
md.digest()
(也修复了
text.length()
的奇怪用法)时,只需在最后一行声明sha1Hash即可。inded,Fixed sha1Hash错误谢谢,正如我在给gleber的信中所说,我已经实现了你的第一个选项。