0

我有一個將加密數據發送到Web服務的WinForms客戶端。 WinForms客戶端創建對稱RijndaelManaged會話密鑰,並且還具有「硬編碼的RSA非對稱公鑰」。交換對稱密鑰

我正在使用EncryptedXml類,這使得打包數據變得非常簡單。

Web服務具有「硬編碼」的私鑰和公鑰,並且可以成功解密SessionKey,然後使用它解密我發送的實際數據。

這是由EncryptedData類自動處理的。

我遇到的問題是,在Web服務結束時,當我想回復時,我似乎無法弄清楚如何獲取已發送的SessionKey。

在我對Web服務端進行任何解密之前,我可以看到加密的會話密鑰,但是在解密XML之後,它消失了(因此我的回覆沒有任何會話密鑰)。

任何想法如何我可以得到這個未加密的密鑰?

+0

我們希望得到比「它消失」更多的信息。代碼片段?硬編碼RSA密鑰也不是很好的做法。爲什麼不從Windows密鑰庫中讀取證書並使用它們進行加密/解密? –

+0

它幾乎是MSDN上代碼的逐字記錄:http://msdn.microsoft.com/en-us/library/ms229746.aspx在Decrypt()方法中,在調用DecryptDocument之後,我可以看到我的數據,但是我怎麼獲得SessionKey(在Encrypt()方法中使用),以便我可以回覆發件人? – Tim

+0

你爲什麼不簡單地使用SSL? – CodesInChaos

回答

0

您無法看到會話密鑰的原因是它會自動解密並使用。通常它被認爲是XML的一部分。如果你想要得到它,只需使用

encryptedxml.decryptencryptedkey

你應該是好的。請注意,對於所有不太重要的安全警告,此處代表的代碼在中間攻擊中很容易受到攻擊,對於填充oracle攻擊的攻擊則較少。它應該有助於防止大多數竊聽企圖。

最後,重用會話密鑰也被認爲是非常糟糕的安全實踐。如果重複使用,至少應考慮使用IV,例如每個後續消息的計數器。