2012-10-16 43 views
1

我正在C中使用OpenSSL实现一个解密混合网络。通过TCP传输RSA加密数据的最佳方式?

我已经使用EVP_SealInit,EVP_SealUpdate和EVP_SealFinal加密了数据。然后,我想通过TCP将这些数据传输到开放端口(第一个“混合”)。

EVP_SealInit等是加密通过TCP发送的消息字符串的最佳方式吗?

如果是这样的话,我如何通过这个连接传输IV?我的意思是:我可以想到几种方法,但是我想如果我只是要传递消息,我就没有看到IV的意义。是否有可能将IV设置为某个值,例如全零?我会怎么做呢?

我很高兴发布代码,如果有帮助。

+0

传统上,IV包含在加密数据的序言中。由于该算法是已知的,所以IV的大小也是一样。在接收端,首先将IV关闭。正如Pavel所说,如果您使用的是随机会话密钥,IV将变得无关紧要(尽管仍然是算法的一部分),您可以在两端使用填充0的IV,而不用担心发送它。第四部分的前言部分是帕维尔说的,他说你需要一个协议时,他的回答是完全正确的。 – WhozCraig

回答

1

您需要一些可以调用协议的东西。在它的条款,你会知道什么时候发送数据,当发送IV等

IV,也可以是零,如果你的会话密钥是随机的,每次(EVP_Seal ......提供)。

+0

谢谢你们两位! (对不起,揍得很快返回) 不幸的是我今天早上意识到,因为会被加密消息5倍(其将被以相反的顺序通过混合净解密),我将结束与五个不同的IV传输。我认为最好的做法是使用唯一的会话密钥。 在这种情况下,我如何将我的IV设置为零?我试图提供NULL来SealInit(如文档建议是可能的),但我的代码段错误。 TIA! –

+0

Zero IV不是指NULL指针。你必须提供一个指向一个有效的IV(即密码块,对于AES 16个字节存储块相同的尺寸)。但是对于大多数实现它可以是恒定的并且是零字节块。 –

相关问题