0

LDAP に md5 ハッシュとして保存されているパスワードがあります{MD5}3CydFlqyl/4AB5cY5ZmdEA== 。一見すると、base64 でエンコードされています。LDAP から受け取ったバイト配列を、次のような読みやすい md5 ハッシュ スタイルの文字列に変換するにはどうすればよい1bc29b36f623ba82aaf6724fd3b16718ですか? {MD5}ハッシュまたは LDAP の一部が追加され、デコードする前に削除する必要がありますか?

commons base64 lib を使用しようとしましたが、次のように呼び出すと:

String b = Base64.decodeBase64(a).toString();

この - を返します[B@24bf1f20。おそらく間違ったエンコーディングですが、UTF-8 に変換すると、判読できない文字が表示されます。それで、これを解決するにはどうすればよいですか?

4

2 に答える 2

2

Java には StringBuilder クラスにそのような AppendFormat メソッドがないため、上記の回答は C# の場合のようです。

正しい解決策は次のとおりです。

public static String getMd5Hash(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException
{
  MessageDigest md = MessageDigest.getInstance("MD5");
  byte[] thedigest = md.digest(str.getBytes("UTF-8"));

  StringBuilder hexString = new StringBuilder();

  for (int i = 0; i < thedigest.length; i++)
  {
      String hex = Integer.toHexString(0xFF & thedigest[i]);
      if (hex.length() == 1)
          hexString.append('0');

      hexString.append(hex);
  }

  return hexString.toString().toUpperCase();
}
于 2013-01-24T20:22:12.553 に答える
1

decodeBase64 はバイト配列を返します

それを16進数の文字列に変換するには:

public static string ByteArrayToString(byte[] ba)
{
  StringBuilder hex = new StringBuilder(ba.Length * 2);
  foreach (byte b in ba)
    hex.AppendFormat("{0:x2}", b);
  return hex.ToString();
}
于 2012-10-10T15:37:28.720 に答える