Прототип хэша Javascript на C#

У меня есть 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;
    }

Если бы кто-нибудь мог указать мне правильное направление, я был бы очень признателен!

Спасибо!

Хеш-коды могут отличаться от версии к версии, поэтому использование их для чего-либо еще, кроме быстрого сравнения, может привести к проблемам позже. При этом вы можете написать несколько модульных тестов. Я бы начал с проверки того, что Java использует ту же кодировку для строк.

realbart 12.05.2018 10:38

Почему вы конвертируете хеш в строку? Обычно это число (и это число в вашем коде JS).

user9539019 12.05.2018 10:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В коде было несколько ошибок.

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();
 }

Другие вопросы по теме