【问题标题】:different c# java result encryption不同的 c# java 结果加密
【发布时间】:2016-01-10 06:36:13
【问题描述】:

我被这个不同的结果所困扰。 我在 C# 中有一些这样的代码。

private static UTF8Encoding encoder = new UTF8Encoding();
private static MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();

public static String MD5(String password)
{    
    String result = "";
    byte[] hash = provider.ComputeHash(encoder.GetBytes(password));
    System.Text.StringBuilder s = new System.Text.StringBuilder();
    foreach (byte b in hash)
    {
        s.Append(b.ToString("x2").ToLower());
    }
    result = s.ToString();

    return result;
}

我想用这段代码在 java 中做同样的事情。

public static String MD5(String password) {
  String result = "";
    try {
      MessageDigest provider = MessageDigest.getInstance("MD5");

      byte[] hash = provider.digest(password.getBytes(StandardCharsets.UTF_8));
      MessageDigest m = MessageDigest.getInstance("MD5");
      byte[] digest = m.digest(hash);
      String s = new BigInteger(1, digest).toString(16).toLowerCase();

      result = s;
    } catch (Exception ex) {
        LogUtil.error_Logging("Authentication", ex.getMessage());
    }   
    return result;
}

我应该更改 java 代码的哪一行? 谢谢

【问题讨论】:

  • 除了发布的答案之外,C# 代码将返回散列中的任何前导零,而您的 Java 代码将抑制它们。

标签: java c# encryption md5


【解决方案1】:

看起来您正在对字符串进行两次哈希处理。

如果你想获得与 C# 代码相同的结果,试试这个。

 byte[] hash = provider.digest(password.getBytes(StandardCharsets.UTF_8));
 MessageDigest m = MessageDigest.getInstance("MD5");     
 String s = new BigInteger(1, hash).toString(16).toLowerCase();

【讨论】:

  • 成功了!我没认出来。谢谢科特
猜你喜欢
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2013-09-16
  • 2015-06-26
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多