【发布时间】:2015-10-29 16:55:45
【问题描述】:
这是question 中项目的延续,但没有充气城堡。
所以我决定废弃充气城堡(可惜,我喜欢这个名字)
无论如何
我有一个服务器和一个客户端。客户端需要向服务端发送一个序列化的对象,服务端会处理这个对象。
它会这样做,但是我想在进程中添加加密。但是没有存储文件或类似的东西。该过程需要基于会话(在某种意义上)
所以,客户端会向服务器请求一个密钥,服务器会生成一个密钥对并发送一个密钥给客户端。
客户端然后使用此密钥加密对象
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
【问题讨论】:
-
服务器是否有相同的cryptoservice rsaclient密钥集?
-
@BugFinder :我假设是这样,它加载服务器提供的 xml var RsaClient =new RSACryptoServiceProvider(2048); while (key.Length > 0) { RsaClient.FromXmlString(key);
-
听起来确实好像没有看到解密它的密钥
-
它可能,但这取决于你如何处理服务器,我猜......因为你肯定有每个 tcpclient 的潜在密钥?以及“requestkey”中的内容
-
为什么要使用自己的(不安全的)密码系统,而不是使用 SSL 等既定机制?
标签: c# encryption cryptography rsa