首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RSACryptoServiceProvider,SSLStream(OpenSSL) -加密,解密

RSACryptoServiceProvider,SSLStream(OpenSSL) -加密,解密
EN

Stack Overflow用户
提问于 2014-06-24 12:52:53
回答 1查看 737关注 0票数 1

在服务器身份验证之后,使用openssl证书。:

代码语言:javascript
复制
sslStream.AuthenticateAsClient(serverName); 

客户端的数据加密是由以下代码进行的:

代码语言:javascript
复制
    string messsage = "teste123.<EOF>";

    byte[] messageRSA = ConvertByte.GetBytes(messsage);

    RSACryptoServiceProvider asr = new RSACryptoServiceProvider(2048);

    var publicKey = asr.ExportParameters(false);

    var csp = new RSACryptoServiceProvider();

    csp.ImportParameters(publicKey);

    messageRSA = csp.Encrypt(messageRSA, false);

数据通过一个SSLStream,如下所示:

代码语言:javascript
复制
sslStream.Write(messageRSA);
sslStream.Flush();

服务器将接收数据:

代码语言:javascript
复制
byte[] bytes = new byte[2048];
bytes = sslStream.Read(buffer, 0, buffer.Length);

我创建了一个方法来清理缓冲区,因为使用"2048“大小,我将有很多不需要的"0”值,用这个方法我会清除所有我不需要的零。

代码语言:javascript
复制
RSACryptoServiceProvider asr = new RSACryptoServiceProvider(2048);
var privateKey = asr.ExportParameters(true);
var csp = new RSACryptoServiceProvider();
csp.ImportParameters(privateKey);
decryptedMessage = FixBuffer(buffer);//method that cleans the buffer, and return a valid array, just with the information that i want.
decryptedMessage= csp.Decrypt(decryptedMessage, false);

当它试图解密时,我得到一个CryptographicException,消息是Invalid Data

问题是,我真的需要在客户端使用相同的公钥来解密这些数据吗?

如果是,如何将此密钥传递给服务器端,并正确解密信息?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-24 17:48:05

要解密数据,当然需要使用与用于加密数据的公钥相对应的私钥。目前,您正在服务器上生成一个新的(不同的)密钥,该密钥无法用于解密数据。至于如何将正确的密钥传递给服务器,答案是您没有--服务器应该生成密钥,并将公共部分(仅)发送给客户端,然后它可以用来加密消息。

尽管如此,考虑到通信已经在加密的SSL连接上进行,似乎完全没有必要对数据进行加密。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24387172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档