2016-04-25 20 views
0

生成AES-256對稱密鑰我環顧四周 - 而且在谷歌的任何地方 - 直接和明確地回答了這個問題,但沒有得到任何答案。所以這裏簡單和簡單的是或不會是真棒...我如何使用php

我已被要求創建一個「AES-256對稱(也稱爲」會話「)密鑰」 - 不加密,只是關鍵 - 用於在肥皂郵件標題內簽署數據。要求是關鍵是256「的大小」... 是的,我知道...

我知道,MCRYPT_RIJNDAEL_128大小32真的是在AES的AES-256密碼。我讀了所有這些。

我知道人們問我在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 ),「產生對稱密鑰的方式是錯誤的」,但沒有明確解釋它的錯誤以及如何糾正錯誤。

任何人都可以幫忙嗎?我會很感激它...

謝謝。

+0

這可能是,但是這個代碼是不必要的複雜。 –

+0

好的。所以隨機字節()或openssl_random_pseudo_bytes()更好?!也沒有關於這個地方的任何跡象,但因爲我必須加密密鑰 - 我必須base64_encode它加密之前?我在soap security上找到的代碼會加密原始密鑰。只是確保我能夠獲得足夠的信息。謝謝。 – darwingoat

+0

是的,這兩種方法在代碼方面更好,因爲您不必使用循環。我沒有使用SOAP加密的經驗,因此我不知道如何在生成密鑰後使用它。 –

回答

0

你的方式沒問題。但simplier方式是

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)。 –