这是此question项目的延续,但没有Bouncy城堡。
所以我决定废弃Bouncy Castle(可惜,我喜欢这个名字)
ANYWAY
我有一台服务器和一台客户端。客户端需要将序列化对象发送到服务器,然后服务器将处理该对象。
这样做,但是我想在流程中添加加密功能。但是没有存储文件或类似的东西。该过程需要基于会话(在某种意义上)
因此,客户端将从服务器请求密钥,服务器将生成密钥对并将密钥发送给客户端。
客户端然后使用此密钥加密对象
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