Shell脚本相当于Java MessageDigest

Mar*_*kku 2 java shell openssl cryptography sha1

如何只使用shell脚本运行以下Java功能?不应该openssl做的伎俩?由于某种原因,值不相同.

贝壳:

$ cat test.txt 
test
$ openssl sha1 test.txt
SHA1(test.txt)= fde773a18bb29f5ed65e6f0a7aa717fd1fa485d4
Run Code Online (Sandbox Code Playgroud)

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));
}
Run Code Online (Sandbox Code Playgroud)

fde773a18bb29f5ed65e6f0a7aa717fd1fa485d4!= a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

Ple*_*and 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
Run Code Online (Sandbox Code Playgroud)