2016-04-25 2 views
0

Я действительно оглядывался - и везде в google - для прямого и ясного ответа на этот вопрос, но не получил нигде. так что здесь простое и простое да или нет было бы замечательно ...Как создать симметричный ключ AES-256, используя php

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

Я знаю, что размер 32 MCRYPT_RIJNDAEL_128 - это действительно шифр 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 tag). он должен быть расшифрован на другом конце и использоваться для проверки дайджестов подписанных заголовков ... и затем появляется gandalf ...

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

Может ли кто-нибудь помочь? я был бы признателен ...

спасибо.

+0

Это, вероятно, есть, но этот код излишне сложным. –

+0

ОК. так что случайные байты() или openssl_random_pseudo_bytes() лучше ?! также - в этом нет никаких указаний, но поскольку я должен зашифровать ключ, я должен использовать base64_encode перед шифрованием? код, который я нашел на мыльной безопасности, шифрует необработанный ключ. просто убедившись, что у меня может быть достаточно информации. Благодарю. – darwingoat

+0

Да, эти два варианта лучше с точки зрения кода, потому что вам не нужно использовать цикл. У меня нет опыта использования SOAP-шифрования, поэтому я не знаю, как его можно использовать после генерации ключа. –

ответ

0

Ваш путь в порядке. Но проще путь

random_bytes(32) 

или

openssl_random_pseudo_bytes(32) 

, если версия вашего PHP ниже 7,0.

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

random_bytes(16) 
+0

Я [сильно препятствовал openssl_random_pseudo_bytes] (https://github.com/FriendsOfPHP/security-advisories/pull/146). –

Смежные вопросы