C#Webサービスと(Java)Androidアプリケーションがあります。これら2つの言語間で同じ結果を生成するSIMPLEハッシュ関数はありますか?最も単純なC#ハッシュはString.GetHashCode()ですが、Javaで複製することはできません。最も単純なJavaハッシュはまったく単純ではありません。そして、C#で正確に複製できるかどうかはわかりません。
関連する場合は、インターネット経由で送信する前にパスワードをハッシュしています。私は現在Encode64を使用していますが、元に戻すことができるため、明らかに安全ではありません。
編集:わかりました、私はSHA256を使用することに決めました。他の誰かが迅速な解決策を必要とする場合に備えて、C#とJavaの両方でまったく同じ文字列を出力する必要があり、可能な限り単純な解決策が必要であることを考慮して、使用したコードを次に示します。
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();
}
みんなありがとう!:)