Сервер Sql, хранящий строку SHA256 в виде вопросительных знаков

Я следил за этой статьей о том, как реализовать хеширование паролей http://www.codeproject.com/Articles/608860/A-Beginners-Tutorial-for-Understanding-and-Impleme

Я внедрил весь код, упомянутый в статье, в свое веб-приложение MVC 5, однако всякий раз, когда я сохраняю PasswordHash и Salt, обе эти строки сохраняются в моей таблице User. как вопросительные знаки, например ????????????????

Я использую базу данных Sql Server 2008 R2. Оба поля в моей таблице пользователей базы данных имеют тип данных Nvarchar (100).

Я также должен упомянуть, что данные сохраняются в базе данных с помощью Entity Framework 5.

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

Любая помощь с этим была бы замечательной.

Спасибо.


person tcode    schedule 04.02.2014    source источник
comment
Пожалуйста, не используйте SHA-256 в качестве хэша пароля, это отстой, так как он слишком быстрый. Как минимум используйте PBKDF2 с как минимум 10000 итерациями. См. Как надежно хешировать пароли? о безопасности.SE для описания того, как безопасное хеширование паролей действительно работает.   -  person CodesInChaos    schedule 04.02.2014


Ответы (2)


Проблема в Utility.cs:

    public static string GetString(byte[] bytes)
    {
        char[] chars = new char[bytes.Length / sizeof(char)];
        System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
        return new string(chars);
    }

В функцию загружаются случайные байты. Это не то, как вы создаете случайную строку. Символы не предназначены для хранения двоичных данных. Такие струны будет сложно проглотить для многих компонентов.

Используйте Convert.ToBase64String и не доверяйте случайным статьям в Интернете. Подтвердите то, что вы найдете, своим собственным пониманием, прежде чем использовать его.

person usr    schedule 04.02.2014

SHA256 - это не строка, а байтовые массивы. Используйте байт [] в коде вашего клиента, используйте VARBINARY в коде сервера.

person Remus Rusanu    schedule 04.02.2014