Подбор криптографии от C# до NodeJS - создать Ха sh SHA256 - PullRequest
1 голос
/ 19 марта 2020

Я пытаюсь перенести некоторый шифр C# в среду NodeJS.

Пример кода C# можно увидеть здесь: https://dotnetfiddle.net/t0y8yD

    byte[] key = Convert.FromBase64String("loQj47u9A5Vj6slaKmCShd/wg2hS+Mn5mM2s5NT5GzF3um1WsbFan8y7cxDVEai8ETG5hZ+CqPDrRBJ/V0yRFA==");
    Console.WriteLine(BitConverter.ToString(key));

    byte[] data = System.Text.Encoding.UTF8.GetBytes("9644873");
    byte[] mac = null;

    using (System.Security.Cryptography.HMACSHA256 hmac = new System.Security.Cryptography.HMACSHA256(key))
    {
        mac = hmac.ComputeHash(data);
    }

В NodeJS Я использую библиотеку 'crypto' для выполнения sh то же самое.

/// key === matches above.  
  var buf = Buffer.from(key, "base64");
  console.log("buff");
  console.log(buf);

  var randomId = 9644873;

  var hmac = crypto.createHash("sha256", buf);
  hmac.update(randomId.toString());

  console.log("hash");
  console.log(hmac.digest());

Если я проверяю информацию о выходе из системы для обоих, я вижу совпадения ключей, значение буфера:

96-84-23-E3-BB-BD-03-95-63-EA-C9-5A-2A-60-92-85-DF-F0-83-68-52-F8-C9-F9-98-CD-AC-E4-D4-F9-1B-31-77-BA-6D-56-B1-B1-5A-9F-CC-BB-73-10-D5-11-A8-BC-11-31-B9-85-9F-82-A8-F0-EB-44-12-7F-57-4C-91-14

Однако возвращаемое га sh значение не совпадает Должно быть, я что-то не так делаю со стороны ha sh в NodeJS, но для создания ха sh?

отправляются те же значения

1 Ответ

1 голос
/ 19 марта 2020

Вместо

var hmac = crypto.createHash("sha256", buf);

вы должны использовать

var hmac = crypto.createHmac("sha256", buf);

см. здесь

Тогда вы получите идентичные результаты.

...