如何仅使用shell脚本运行以下Java功能?不应该openssl做的伎俩?由于某种原因,值不相同。
外壳:
$ cat test.txt
test
$ openssl sha1 test.txt
SHA1(test.txt)= fde773a18bb29f5ed65e6f0a7aa717fd1fa485d4
Java代码(play framework origin):
import org.apache.commons.codec.binary.Hex;
public static String hexSHA1() {
value = "test";
try {
MessageDigest md;
md = MessageDigest.getInstance("SHA-1");
md.update(value.getBytes("utf-8"));
byte[] digest = md.digest();
return byteToHexString(digest);
} catch (Exception ex) {
return null;
}
}
public static String byteToHexString(byte[] bytes) {
// a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
return String.valueOf(Hex.encodeHex(bytes));
}
fde773a18bb29f5ed65e6f0a7aa717fd1fa485d4!= a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
答案 0 :(得分:7)
test.txt
末尾有回车和换行。这些显然不在您的Java字符串中。
$ echo -n test > test.txt
$ openssl sha1 test.txt
SHA1(test.txt)= a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
$ echo -ne 'test\r\n' > test2.txt
$ openssl sha1 test2.txt
SHA1(test2.txt)= fde773a18bb29f5ed65e6f0a7aa717fd1fa485d4
答案 1 :(得分:0)
值与您为test.txt
文件计算SHA1的第一种情况不同,在下一种情况下,您为test
字符串计算相同内容。
如果你打算从java app中调用openssl
,请使用以下代码片段:
Runtime.getRuntime()。exec('openssl','sha1','test.txt')