我正在尝试对某些字节进行哈希处理,但是我的代码生成的哈希与使用Linux控制台获得的哈希不同。
package com.example.javatest;
import java.security.MessageDigest;
public class StartingPoint {
public static void main(String[] args) throws Exception{
System.out.println(getSHA1("ABC"));
}
public static String getSHA1(String s) throws Exception{ // Generate SHA1 hash
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(s.getBytes("iso-8859-1"), 0, s.length());
byte[] sha1Hash = md.digest();
return convertToHex(sha1Hash);
}
public static String convertToHex(byte[] data) { // Convert to a HEX string
StringBuilder buf = new StringBuilder();
for (byte b : data) {
int halfbyte = (b >>> 4) & 0x0F;
int two_halfs = 0;
do {
buf.append((0 <= halfbyte) && (halfbyte <= 9) ? (char) ('0' + halfbyte) : (char) ('a' + (halfbyte - 10)));
halfbyte = b & 0x0F;
} while (two_halfs++ < 1);
}
return buf.toString();
}
}
该代码产生以下哈希:3c01bdbb26f358bab27f267924aa2c9a03fcfdb8
但是在Linux控制台上执行以下命令时:
$ echo "ABC" | sha1sum
结果是:c95ad0ce54f903e1568facb2b120ca9210f6778f
为什么?
最佳答案
您的echo命令还会输出换行符,然后将其换行到sha1sum中,因此您需要在不使用sha1sum命令的情况下对其进行换行。
我@vps:〜$ echo -n ABC|sha1sum
3c01bdbb26f358bab27f267924aa2c9a03fcfdb8
-n do not output the trailing newline