Хэши SHA-256 различаются между C# и Javascript

В настоящее время я работаю над проектом, который будет включать считывание кредитной карты для пропусков на основе строк базы данных. Как и в системе вызовов, хэш SHA-256 номера CC должен совпадать с хэшем в строке DB, чтобы считаться «правильным захватом».

Однако, поскольку система кассовых сборов основана на браузере, номер CC при получении должен быть хэширован на стороне клиента с использованием Javascript, а затем сравнен с ранее загруженными данными вызовов.

Однако при попытке хеширования чисел хэш всегда отличается от того, что было хешировано при создании строки БД (с использованием VB.NET и SQL Server 2008 R2). Например, если номер CC в базе данных оказался 4444333322221111, то результирующий хеш из .NET станет xU6sVelMEme0N8aEcCKlNl5cG25kl8Mo5pzTowExenM=.

Однако при использовании любой хэш-библиотеки SHA-256 для Javascript, которую я смог найти, результирующий хэш всегда будет NbjuSagE7lHVQzKSZG096bHtQoMLscYAXyuCXX0Wtw0=.

Я предполагаю, что это какая-то проблема с Unicode/UTF-8, но что бы я ни пытался, я не могу получить одинаковые хэши, и это начинает сводить меня с ума. Кто-нибудь может дать совет?

Вот кое-что, что может дать некоторое представление. Перейдите по адресу http://www.insidepro.com/hashes.php?lang=engи вставьте «4444333322221111» без кавычек в поле «Пароль». После этого прокрутите вниз до раздела SHA-256.

Вы видите четыре результата, два из них — хеш-коды, которые я опубликовал (второй сверху — хэш Javascript, а нижний — хэш SQL). Согласно этой странице, нижний хеш-результат генерируется с использованием строки base 64, а также преобразования пароля в формат Unicode.

Я исследовал это и испробовал множество различных функций для кодирования пароля в формате Unicode, но независимо от того, какие маленькие настройки я пробовал или какие другие функции я ни делал, мне никогда не удавалось добиться соответствия хэш-кода, который мне нужен.

В настоящее время я изучаю параметры, используемые при вызове функции SHA-256 на стороне сервера.

ОБНОВЛЕНИЕ:

Итак, чтобы убедиться, что я не сошел с ума, я запустил метод Hash, который я использую для чисел CC, в непосредственном окне во время отладки. Опять же, результат остается таким же, как и раньше. Скриншот можно посмотреть здесь: http://i.imgur.com/raEyX.png

7
задан William Thomas 11 May 2012 в 22:32
поделиться