У меня есть C# WebService и (Java) приложение для Android. Существует ли ПРОСТОЙ хэш-функция, которая дает тот же результат между этими двумя языками? Простейший хеш C# - String.GetHashCode(), но я не могу его реплицировать на Java. Простейший Java-хэш не является простым. И я не знаю, могу ли я воспроизвести его именно на C#.Простой хэш, который всегда равен между C# и Java
В случае, если это имеет значение, я передаю пароли перед отправкой через Интернет. В настоящее время я использую Encode64, но это явно небезопасно, так как мы можем отменить его.
EDIT: Хорошо, я остановился на использовании 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();
}
Спасибо, ребята! :)
Как насчет хэширования строки с общим хэш-функции из какой-либо библиотеки/существующего пакета? – nhahtdh
AES. Не изобретайте велосипед. – starbolin
Убедитесь, что вы не просто отправляете простой хэш через Интернет. Это не лучше, чем отправка пароля в виде открытого текста, поскольку кто-то может просто захватить и воспроизвести передачу хеша для входа. –