2016-11-21 9 views
0

У меня есть 5 различных строк, которые я хочу использовать в качестве ключа. К ним относятся:Как использовать короткие строки для использования в качестве ключа AES?

asuspcgame, dragonZ, whiterice, ball, document 

Я хочу, чтобы выполнить шифрование с использованием EVP OpenSSL, как это: https://www.openssl.org/docs/man1.0.2/crypto/EVP_EncryptInit.html

Однако я понял, что пример использует ключ фиксированного размера (16 символов для AES_128).

unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 
EVP_EncryptInit_ex(&ctx, EVP_idea_cbc(), NULL, key, iv); 

Мой вопрос: Как заставить мои строки всегда иметь фиксированный размер 16 символов?

Я не видел никаких функций от EVP, которые могли бы заставить мои строки стать фиксированным ключом.

+1

Современная функция деривации [HKDF] (https://tools.ietf.org/html/rfc5869). Как только вы извлекаете-и-расширяете, запускайте вывод через какую-то память, как и Scrypt, чтобы сделать грубую работу более болезненной. Вы также можете запустить его, хотя PBKDF2 и друзей. – jww

ответ

2

Не используйте строки в качестве ключей шифрования, используйте функцию деривации пароля, такую ​​как PBKDF2 с подсчетом раундов, так что функция занимает ~ 100 мс. Это приведет к получению выходных данных байтов для использования в качестве ключа.

Для использования IV используется криптографический генератор псевдослучайных чисел и префикс зашифрованных данных с помощью IV, нет необходимости хранить секрет IV.

Или еще лучше, используйте RNCryptor; он делает все это для вас и добавляет аутентификацию шифрования, управление версиями и кросс-платформу.