我有一个 C# WebService 和一个 (Java) Android 应用程序。是否有一个简单的哈希函数可以在这两种语言之间产生相同的结果?最简单的 C# 哈希是 String.GetHashCode(),但我无法在 Java 中复制它。最简单的 Java 哈希一点也不简单。而且我不知道我是否可以在 C# 中完全复制它。
如果它是相关的,我会在通过互联网发送密码之前对密码进行哈希处理。我目前正在使用 Encode64,但这显然不安全,因为我们可以反转它。
编辑:好的,我决定使用 SHA256。万一其他人需要一个快速的解决方案,这里是我使用的代码,考虑到我希望 C# 和 Java 都输出完全相同的字符串,我需要最简单的解决方案。
爪哇
public String Hash(String s)
{
StringBuffer sb = new StringBuffer();
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(s.getBytes());
byte byteData[] = md.digest();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16)
.substring(1));
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return sb.toString();
}
C#
public static string Hash(String s)
{
HashAlgorithm Hasher = new SHA256CryptoServiceProvider();
byte[] strBytes = Encoding.UTF8.GetBytes(s);
byte[] strHash = Hasher.ComputeHash(strBytes);
return BitConverter.ToString(strHash).Replace("-","").ToLowerInvariant().Trim();
}
多谢你们!:)