2012-10-16 73 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個字節存儲塊相同的尺寸)。但是對於大多數實現它可以是恆定的並且是零字節塊。 –

相關問題