1. ホーム
  2. java

[解決済み] Java文字列からSHA1へ

2022-04-23 01:38:43

質問

Javaで簡単なString to SHA1コンバータを作ろうとしているのですが、こんな感じです。

public static String toSHA1(byte[] convertme) {
    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("SHA-1");
    }
    catch(NoSuchAlgorithmException e) {
        e.printStackTrace();
    } 
    return new String(md.digest(convertme));
}

これを渡すと toSHA1("password".getBytes()) となります。 [�a�ɹ??�%l�3~��. おそらくUTF-8のような単純なエンコーディングの修正なのでしょうが、私が欲しいもの、すなわち 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 ? それとも、私のやり方が完全に間違っているのでしょうか?

どのように解決するのですか?

アップデイト

を使用することができます。 アパッチコモンズコーデック (バージョン1.7以上)を使用すると、この作業を行うことができます。


DigestUtils.sha1Hex(stringToConvertToSHexRepresentation)

ありがとうございました。 ジョン・オンストット をご提案いただきました。


古い回答

バイト配列から16進文字列に変換する。 Realのハウツー .

return byteArrayToHexString(md.digest(convertme))

と(RealのHow Toからコピー)。

public static String byteArrayToHexString(byte[] b) {
  String result = "";
  for (int i=0; i < b.length; i++) {
    result +=
          Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
  }
  return result;
}


ちなみに、Base64を使うと、よりコンパクトな表現ができるかもしれません。 Apache Commons Codec API 1.4 には、このような悩みを解消してくれる素敵なユーティリティがあります。 こちらをご覧ください