2

シェルスクリプトのみを使用して次のJava機能を実行するにはどうすればよいですか? openssl はそのトリックを行うべきではありませんか? 何らかの理由で値が同じではありません。

シェル:

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

Java コード (再生フレームワークの起源):

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ます。

Java アプリ内から呼び出す場合はopenssl、次のコード スニペットを使用します。

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

于 2013-01-14T11:09:19.473 に答える