SHA1CryptoServiceProvider в .NET не соответствует шасуму UNIX - PullRequest
1 голос
/ 14 июля 2010

Я пытаюсь разделить аутентификацию между приложением ASP.NET и другим приложением на основе UNIX, где хешированный пароль хранится в базе данных.Мне нужно убедиться, что алгоритмы хеширования на обеих платформах совпадают.

Вот как я хэширую в C #:

var sha1 = new SHA1CryptoServiceProvider();
var passwordBytes = Encoding.UTF8.GetBytes(password);
var passwordHash = sha1.ComputeHash(passwordBytes);
var base64 = Convert.ToBase64String(passwordHash);
return base64;

Если я использую пароль p@ssw0rd, хэш равен 57B2AD99044D337197C0C39FD3823568FF81E48A и base64 этого хэша - V7KtmQRNM3GXwMOf04I1aP+B5Io=.Хэш base64 - это то, что хранится в БД.

Если я делаю то же самое в UNIX, я получаю совершенно другой хеш:

echo p@ssw0rd | iconv -f ISO-8859-1 -t UTF-8 | shasum -a 1 | base64 -e производит ZTU3NmQwNmUzMTAwNmRkNzFhNTFjZTg5ZjViMGI4NWM2NTMyNzg3OCAgLQo=

Если вы попробуете это с OpenSSL, используйте этот echo "p@ssw0rd" | openssl dgst -sha1 | openssl enc -base64, и вы получите тот же хеш.

Чем отличаются два алгоритма SHA1, которые приводят к вычислению разных хешей?Я тоже не солю.

ОБНОВЛЕНИЕ

Секретный соус выглядит следующим образом: echo -n "p@ssw0rd" | openssl dgst -sha1 -binary | openssl enc -base64

echo -n убирает перевод строки,и -binary необходимо.

Надеюсь, это кому-нибудь поможет.

Спасибо, Марк

Ответы [ 2 ]

5 голосов
/ 14 июля 2010
  • echo добавляет новую строку, вам нужно сделать echo -n
  • shasum может сделать то же самое, проверьте вывод этого перед тем, как передать его на base64)
  • sha1.ComputeHash () возвращает вам двоичное представление хеша, а не шестнадцатеричное представление, которое производит утилита shasum - это означает, что вы base64 кодируете разные вещи в C # против командной строки unix.Используйте, например, var passwordHashHex = String.Concat(Array.ConvertAll(passwordHash , x => x.ToString("X2")); для преобразования в гекс, прежде чем выполнять преобразование base64 в C #
0 голосов
/ 14 июля 2010

Согласно руководству:

Суммы рассчитываются, как описано в FIPS PUB 180-2. При проверке ввод должен быть прежним выводом этой программы. Режим по умолчанию - печать строки с контрольной суммой, символом, указывающим тип ('*' для двоичного файла, '?' Для переносимого, ''для текста) и имя для каждого ФАЙЛА.

Вероятно (я не знаю) генерирует соленый хеш.Это не длина, соответствующая только одному хеш-значению.

Вы пытались использовать вместо этого " sha1sum "?Я получаю противоречивую информацию об этом, но это может сработать.

...