【发布时间】:2013-03-18 03:58:33
【问题描述】:
HashCalc 在顶部有一个名为“数据格式”的字段,我将其切换为“HexString”,然后在数据字段中输入9a 的测试值。我在上面运行了一个 SHA-1 哈希,答案是:13cba177bcfad90e7b3de70616b2e54ba4bb107f
(注意:在线哈希器会将“9a”作为字符串进行哈希处理,从而得到e8eef065fb7295044d65b305bab18a9a645d1abf 的答案。这对这个应用程序来说是错误的)
现在,我需要将这种类型的散列嵌入到我的 Java 程序中。这是我目前得到的(包装在 try/catch 中):
String ss = "9a";
ByteBuffer bb = ByteBuffer.allocate(8);
byte[] ba = bb.putLong(Long.decode("0x"+ss).longValue()).array();
MessageDigest md = MessageDigest.getInstance("SHA-1");
String results = encodeHex(md.digest(ba));
System.out.println("sha:"+results);
但是,我的结果是E73C417858807239DD5BC30BA978C14D57F80834
我做错了什么?
编辑:添加了十六进制标记,很明显数据必须采用某种十六进制格式。因为 HashCalc 必须设置为“HexString”而不是“TextString”,它返回不同的结果。解决方案很可能包括改变我处理这些十六进制数字的方式。 --> 原来是真的
【问题讨论】:
-
不幸的是,这个答案“几乎”没有意义。当我将
aff放入 HashCalc 时,它给了我一个错误“十六进制字符串的长度必须是偶数!”因为它需要两个十六进制数字来表示一个字节。另外,我不确定如何将该库添加到我的 NetBeans! DOH! -
也许散列 8 字节 000000000000009a 与散列 1 字节 9a 不同?
-
e8eef065fb7295044d65b305bab18a9a645d1abf是9a的正确哈希值作为字符串而不是十六进制数字....使用 HashCalc(上面有问题的链接)进行测试。它有两个选项“文本字符串”和“十六进制字符串”。我需要复制“十六进制字符串”而不是“文本字符串”的结果,即e8eef065fb7295044d65b305bab18a9a645d1abf -
@LouisWasserman - 那是转折点。看我的回答。