2

如何仅使用 shell 脚本运行以下 Java 功能?openssl 不应该解决问题吗?由于某些原因,值不一样。

壳:

$ cat test.txt 
test
$ openssl sha1 test.txt
SHA1(test.txt)= fde773a18bb29f5ed65e6f0a7aa717fd1fa485d4

Java代码(play框架出处):

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

4

2 回答 2

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
于 2013-01-14T11:10:36.030 回答
0

值与您为文件计算 SHA1 的第一种情况不同test.txt,在下一种情况下您为test字符串计算相同的值。

如果您openssl要从 Java 应用程序内部调用,请使用以下代码片段:

Runtime.getRuntime().exec('openssl', 'sha1', 'test.txt')

于 2013-01-14T11:09:19.473 回答