У меня есть javascript string.prototype, который создает хеш для строки. JS:
String.prototype.hashCode = function () {
var hash = 5381, i = this.length
while (i)
hash = (hash * 33) ^ this.charCodeAt(--i)
return hash >>> 0;
}
Мне нужно воссоздать этот хеш на C# для другого приложения, использующего ту же базу данных. Ниже то, что у меня есть ...
public string hashCode(string password)
{
var hash = 5381;
int i;
string newHash = "";
int index = password.Length;
for (i = 0; i > index; i++)
hash = (hash * 33) ^ (char)password[--index];
hash = (int)((uint)index >> 0);
newHash += hash;
return newHash;
}
Если бы кто-нибудь мог указать мне правильное направление, я был бы очень признателен!
Спасибо!
Почему вы конвертируете хеш в строку? Обычно это число (и это число в вашем коде JS).



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В коде было несколько ошибок.
public string hashCode(string password)
{
int hash = 5381;
int i = password.Length;
while(i > 0)
hash = (hash * 33) ^ (char)password[--i];
hash = (int)((uint)i >> 0);
return hash.ToString();
}
Хеш-коды могут отличаться от версии к версии, поэтому использование их для чего-либо еще, кроме быстрого сравнения, может привести к проблемам позже. При этом вы можете написать несколько модульных тестов. Я бы начал с проверки того, что Java использует ту же кодировку для строк.