Как мне сгенерировать симметричный ключ AES-256 с помощью php

Я посмотрел вокруг - и везде на Google - для прямого и ясного ответа на этот вопрос, но не получил нигде. так что здесь просто и ясно да или нет было бы здорово...

Меня попросили создать "симметричный ключ AES-256 (также называемый" сеанс ")" - не шифрование, а просто ключ - для использования для подписи данных в заголовках мыльных сообщений. требование заключается в том, что ключ имеет размер 256 "... да, я знаю...

я знаю, что MCRYPT_RIJNDAEL_128 размер 32 действительно является шифром AES-256 в php. Я прочитал все это.

Я знаю, что люди, спрашивающие меня, имеют реализацию в Java, которая работает для них. я должен работать с php. у меня есть следующий код: `

$keysize = mcrypt_module_get_algo_key_size(MCRYPT_RIJNDAEL_128);
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '',MCRYPT_MODE_CBC, '');
$keysize = 32;
while (strlen($key) < $keysize) $key =  mcrypt_create_iv(mcrypt_enc_get_iv_size ($td),MCRYPT_RAND);  

это дает мне грубый "ключ".

вопрос: является ли необработанный ключ над "сеансным / симметричным ключом AES-256", который можно использовать для подписи заголовков безопасности мыла?

после того, как необработанный ключ используется для подписи, он шифруется с использованием ключа из открытого сертификата (с использованием rsa-oaep-mgf1p) и внедряется в заголовки (тег EncryptedKey). он должен быть расшифрован на другом конце и использован для проверки дайджестов подписанных заголовков... а затем появляется гэндальф...

Я спрашиваю, потому что мне сказали с другой стороны (используя java), что "что-то не так, как генерируется симметричный ключ", но без четкого объяснения того, что в этом неправильно, и как исправить это неправильно.

кто-нибудь может помочь? я бы оценил это...

Благодарю.

1 ответ

Твой путь в порядке. Но более простой способ

random_bytes(32)

или же

openssl_random_pseudo_bytes(32)

если версия вашего php ниже 7.0.

Вы также можете сгенерировать 16-байтовый IV

random_bytes(16)
Другие вопросы по тегам