Необходимо преобразовать пароль в
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;
}