私は Java で単純な文字列から 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
アップデート
使用できますApache Commons コーデック(バージョン 1.7 以降) でこの作業を実行します。
DigestUtils.sha1Hex(文字列をSHex表現に変換)
@に感謝しますジョン・オンストットこの提案に対して。
古い回答
バイト配列を 16 進文字列に変換します。RealのHow Toが教えてくれる。
return byteArrayToHexString(md.digest(convertme))
(Real's 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 コモンズ コーデック API 1.4、すべての痛みを取り除く素晴らしいユーティリティがあります。こちらを参照