C # sha256 в PHP

1

У меня есть таблица хешей и солей, ранее созданная другой компанией. Хэш был выполнен в С#, а хэш-метод - sha256. sha256(password+salt) этого является sha256(password+salt).

Пример входов:

password = 'rosnicka'
salt     = 'zxwqTy+XjaY=' 
hash     = '3jdt1+JL3MPmjYr2OoXdoUwNfuweuDCZa8/3g7SfsNg='

Когда я попытался запустить функцию хэширования в PHP

выход этого "1125ed47a7aa11bc1c54c841b5eb7a6e72aa8ad27e010e6e25baa5b2a86cffb3"

Я получаю те же результаты, используя только калькуляторы хеширования

Я связался с ними, чтобы узнать, что я делаю неправильно. Они сказали мне, что хранят ASCII-версию хэша в базе данных. Что мне делать, чтобы получить тот же хэш в PHP или что делать, чтобы преобразовать хэш в исходный хэш файл sha256?

большое спасибо!

  • 1
    Хэш C # был закодирован в Base64 (как и соль, поэтому он может быть декодирован в Base64 перед применением), в php у вас есть шестнадцатеричное представление байтов. Base64 кодирует PHP-результат хеширования, если он не совпадает с Base64, декодирует соль, добавляет байты и Base64 кодирует результат.
  • 0
    @AlexK. да, но разве не должно быть что-то еще? Base64 дает вам больший вывод, чем ввод, тогда как в приведенном выше примере ожидаемый хеш составляет всего 44 символа - против 64 символов в хэше sha256.
Показать ещё 7 комментариев
Теги:
ascii
sha256

1 ответ

2
Лучший ответ

Как сказал Алекс К:

base64_encode(hash('sha256', 'rosnicka'.base64_decode('zxwqTy+XjaY='), true));

сделает трюк

  • 0
    человек! Я люблю тебя :) Я пытался воспроизводить код C # построчно, но мне не удалось. Почему мне не нужно конвертировать все в массив байтов?
  • 0
    @ AdamBednár параметр 'true' позволит выводить байты hash (). Вам не нужно преобразовывать все в байты, но просто убедитесь, что вы объединяете переменные одного типа (пароль - простая строка, а соль - в кодировке base64)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню