Почему я получаю разные хэш MD5 от c # до js? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть функция ac #, которую я использую для шифрования пароля:

System.Security.Cryptography.MD5CryptoServiceProvider _md5Provider = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] bs = System.Text.Encoding.UTF8.GetBytes(_password);
            bs = _md5Provider.ComputeHash(bs);
            System.Text.StringBuilder s = new System.Text.StringBuilder();
            foreach (byte b in bs)
            {
                s.Append(b.ToString("x2").ToLower());
            }

            string _md5password = s.ToString();

Я пытаюсь зашифровать тот же пароль в js с помощью crypto-js / md5:

loginUser() {
                console.log(md5(this.password).toString());
            }

Я получаю другой хэш.

1 Ответ

0 голосов
/ 10 октября 2018

Похоже, файл JavaScript сохраняется в кодировке, отличной от UTF-8.

Хеш-функции, такие как MD5, вычисляют хеш из массива байтов, а не из строки.Итак, вы сначала вычисляете байтовый массив из пароля, используя определенную кодировку, такую ​​как Unicode, UTF-8 или ANSI;используя разные кодировки, вы получаете разные значения.

Чтобы создать тот же хэш MD5, сохраните файл JavaScript с использованием UTF-8 (поскольку код C # использует UTF-8).Таким образом, в программах на C # и JavaScript функция MD5 вычисляет байтовые массивы с одинаковыми значениями, поэтому хэш будет одинаковым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...