@gth-other

Можно ли в качестве 128 битного ключа использовать первые 128 бит хеша SHA256?

Необходимо преобразовать пароль в 128 битный ключ. Решил в качестве этой цели использовать хеш функцию. Изучив 128 битные хеш функции я понял, что это либо устаревшие MD хеш функции либо SHA1 в котором нашли кучу дыр. Я понял, что и тот и другой вариант по понятным причинам не подходят и стал смотреть 256 битные хеш функции. Нашел вроде как нормальный SHA256, но он возвращает хеш длиной в 256 бит, а ключ должен быть длиной 128 бит. Можно ли просто взять первую половину хеша, а вторую отбросить?

P.S. SHA256 хеш считается не 1 раз, а 10 000 для противодействия брутфорсу. Вот функция на C++:
std::vector<unsigned char> Cryptor::generate_key_from_password(std::vector<unsigned char> password) {
    std::vector<unsigned char> hash = SHA256::get_hash(std::move(password));
    for (int i = 0; i < 9999; i = i + 1) {
        hash = SHA256::get_hash(hash);
    }
    hash.resize(16);
    return hash;
}
  • Вопрос задан
  • 282 просмотра
Решения вопроса 1
usdglander
@usdglander
Yipee-ki-yay
Можно конечно, если увеличение коллизий вас не сильно волнует. Длинна хеша в 256 бит - не просто так взята.

upd:
SHA256 хеш считается не 1 раз, а 10 000 для противодействия брутфорсу.

А это ещё бОльшая глупость. Хеш-функция НЕ биективна! Так что 10000 раз вычисляя её значение вы так же увеличиваете количество коллизий.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Lynn
@Lynn
nginx, js, css
Не надо изобретать велосипеды в криптографии
https://ru.m.wikipedia.org/wiki/PBKDF2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы