不同的 c# java 结果加密
different c# java result encryption
我坚持这个不同的结果。
我在 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# 代码相同的结果,请尝试此操作。
byte[] hash = provider.digest(password.getBytes(StandardCharsets.UTF_8));
MessageDigest m = MessageDigest.getInstance("MD5");
String s = new BigInteger(1, hash).toString(16).toLowerCase();
我坚持这个不同的结果。 我在 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# 代码相同的结果,请尝试此操作。
byte[] hash = provider.digest(password.getBytes(StandardCharsets.UTF_8));
MessageDigest m = MessageDigest.getInstance("MD5");
String s = new BigInteger(1, hash).toString(16).toLowerCase();