簡體   English   中英

RSA(客戶端加密/服務器解密)

[英]RSA (client side encryption/ server decryption)

這是該問題中項目的延續,但沒有充氣城堡。

因此,我決定取消Bouncy Castle(可惜,我喜歡這個名字)

無論如何

我有一個服務器和一個客戶端。 客戶端需要將序列化的對象發送到服務器,然后服務器將處理該對象。

它可以做到這一點,但是我想為該過程添加加密。 但是無需存儲文件或類似的東西。 該過程需要基於會話(在某種意義上)

因此,客戶端將向服務器請求密鑰,服務器將生成密鑰對並將密鑰發送給客戶端。

然后,客戶端使用此密鑰來加密對象

string key = ASCIIEncoding.ASCII.GetString(RequestKey(tcpclnt));
var RsaClient =new RSACryptoServiceProvider(2048);
while (key.Length > 0) {
     RsaClient.FromXmlString(key);
     var transmit = ASCIIEncoding.ASCII.GetBytes(stringtosend);
                  var encrypted = RsaClient.Encrypt(transmit,false);

服務器然后接收這些加密的字節並嘗試對其解密

 raw = Receive(clientSocket);
 byte[] r = TrimBytes(ASCIIEncoding.ASCII.GetBytes(raw),256);
 var sdecrypted = ASCIIEncoding.ASCII.GetString(RsaServer.Decrypt(r, false));

但是可惜服務器無法做到這一點。 解密時會引發錯誤

Key does not exist.

所以,我的問題是,我在做什么錯?

在此先感謝您提供的任何幫助。

更新

更改了服務器中的代碼

var RSAKeyInfo = new RSACryptoServiceProvider(2048, new CspParameters(1)).ExportParameters(true);

新錯誤

The parameter is incorrect

雖然使用加密技術可以很好地完成工作,但使用基本的加密算法來構建自己的安全通信系統是解決不安全問題的秘訣。 對於您在自己的系統中解決的每個弱點,可能甚至沒有想到的10個(或更多!)。

因此,我強烈建議您使用SSL / TLS來保護您的通信。 這將提供您需要的所有安全性,並且還可以直接集成,因為.NET Framework的SslStream具有必要的功能,可以用作連接的服務器 客戶端。

這樣做還可以使您將來有選擇地使用其他安全機制,例如,基於證書的客戶端身份驗證,而無需付出額外的努力。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM