为什么我的Java和命令行SHA256输出不同?
在命令行上对字符串进行散列与在Android上对Java进行散列得到了不同的结果。我肯定我做错了什么,但我不知道是什么 命令行:为什么我的Java和命令行SHA256输出不同?,java,sha256,Java,Sha256,在命令行上对字符串进行散列与在Android上对Java进行散列得到了不同的结果。我肯定我做错了什么,但我不知道是什么 命令行: kevin@aphrodite:~$ echo derp | sha256sum ee673d13de31533a375b41d9e57731d9bb4dbddbd6c1d2364f15be40fd783346 - 爪哇: Java输出: 10-05 13:32:57.412: D/Config(12082): input hash: 3f4146a1d0b5da
kevin@aphrodite:~$ echo derp | sha256sum
ee673d13de31533a375b41d9e57731d9bb4dbddbd6c1d2364f15be40fd783346 -
爪哇:
Java输出:
10-05 13:32:57.412: D/Config(12082): input hash: 3f4146a1d0b5dac26562ff7dc6248573f4e996cf764a0f517318ff398dcfa792
下面是我在另一个问答中找到的bytesToHex(…)
方法。我通过为每个b
记录Integer.toHexString(b)
来确认它做的事情是正确的
private static final char[] hexDigit = "0123456789abcdef".toCharArray();
private static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int i = 0; i < bytes.length; ++i) {
int b = bytes[i] & 0xFF;
hexChars[i * 2] = hexDigit[b >>> 4];
hexChars[i * 2 + 1] = hexDigit[b & 0x0F];
}
return new String(hexChars);
}
private static final char[]hexDigit=“0123456789abcdef.tocharray();
私有静态字符串bytesToHex(字节[]字节){
char[]hexChars=新字符[bytes.length*2];
对于(int i=0;i>>4];
十六进制字符[i*2+1]=十六进制数字[b&0x0F];
}
返回新字符串(hexChars);
}
因为echo
包含一个尾随的新行。你可以用
echo -n derp | sha256sum
或将\n
添加到纯文本中
final String plaintext = "derp\n";
既然答案已经确定(\n
在echo中),我还建议您可以用TestOhex()
代替您的自定义,取而代之的是Android中不存在的@Keith。
final String plaintext = "derp\n";