RSA(客户端加密/服务器解密)
RSA (client side encryption/ server decryption)
这是此 question 中项目的延续,但没有充气城堡。
所以我决定废弃 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.
所以,我的问题是,我做错了什么?
非常感谢您提供的任何帮助。
UPDATE
更改了服务器中的代码
var RSAKeyInfo = new RSACryptoServiceProvider(2048, new CspParameters(1)).ExportParameters(true);
新错误
The parameter is incorrect
这是此 question 中项目的延续,但没有充气城堡。
所以我决定废弃 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.
所以,我的问题是,我做错了什么?
非常感谢您提供的任何帮助。
UPDATE
更改了服务器中的代码
var RSAKeyInfo = new RSACryptoServiceProvider(2048, new CspParameters(1)).ExportParameters(true);
新错误
The parameter is incorrect