Реализация SHA256 с использованием Base64 для ввода и вывода - PullRequest
0 голосов
/ 05 июля 2011

Меня попросили разработать бэк-офис компании для iPad, и при разработке экрана входа в систему я столкнулся с проблемой в процессе аутентификации.

Пароли соединены солью,хэшируется с использованием SHA-256 и сохраняется в базе данных.Бэк-офис основан на Flash и использует библиотеку as3crypto для хэширования, затем пароля + соли, и моя проблема заключается в том, что текущая реализация использует Base64 для ввода и вывода.

Этот сайт демонстрирует, как это можно сделать: просто выберите Hash, выберите Base64 для формата ввода и вывода и выполните запуск.До сих пор все мои попытки дали результаты, отличные от тех, которые дает мне этот сайт (и код backoffice).

Хотя я думаю, что в теории это должно быть относительно просто:

  1. Base64 кодирует пас + соль
  2. Хеширует его, используя SHA-256
  3. Base64 снова кодирует результат

, пока я не смог этого сделатьи, честно говоря, у меня болит голова.Мой код становится живым лабиринтом, я должен буду переделать его завтра, я думаю.

Есть идеи?Приветствия и заранее спасибо

PS: Вот код Flash от Backoffice для генерации хешированных паролей:

var currentResult:ByteArray;
var hash:IHash = Crypto.getHash('sha256');
var data:ByteArray = Base64.decodeToByteArray(str + vatel);
currentResult = hash.hash(data);
return Base64.encodeByteArray(currentResult).toString();

1 Ответ

1 голос
/ 06 июля 2011

Код backoffice не делает

  1. Base64 кодирует проход + соль
  2. Хэш, используя SHA-256
  3. Base64 снова кодирует результат

(как вы написали выше)

Вместо этого он

  1. Base64 декодирует строку pass + salt в байтовый массив
  2. Хешировать байтовый массив с использованием SHA-256
  3. Base64 кодирует массив байтов, возвращая строку

Как и в предыдущем шаге 1, неясно, какую кодировку символов используют входные строки. Вы должны убедиться, что обе системы используют одинаковую кодировку для входных строк! UTF8, UTF16-LE или UTF16-BE вносят большой вклад в этом случае!

Начните с выяснения правильной кодировки символов для использования на стороне iOS.

О, и Мэтт Галлахер написал простой в использовании класс-оболочку для хэшей для iOS, HashValue.m , я использовал его с хорошими результатами.

...