2016-04-25 43 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)。 –