c#网络加密传输

网上已经有很多测试,我就不多说了。先说说我的测试。

1.net framework 都应该合适。

2.RSACryptoServiceProvider类在.net core 下无法调用xml导出方法(windows)。

3.居网上说RSACryptoServiceProvider在Linux上不支持,我还没有测试。

4.按照网上说的使用 RSA.Create();返回的接口只能导出参数结构RSAParameters;xml,blob都不支持。因此我将结构转成byte[]存储文件。网上都没有说明怎么操作的。都是一样的。

再来说我们一般的操作。我也是按照网上来的。当加密解密流程测试通后,就是过程了。这个细节不一样,但是原理一样。

客户端AES加密数据,AES秘钥由客户端自己确定A,然后用RSA公钥加密 AES 的秘钥为B.每次传输的数据  有A+B构成。RSA秘钥由服务端确定,私钥一直保持在服务端,公钥需要给客户端。 

这里就不说web了,现成的ssl.

那么安装c/s模型怎么建立呢?我觉得大概是这样。

大概过程:

1.客户端登录(需要安装协议传递数据,主要是一个授权字符串,我demo里面是有2种,一种是写死的字符串,一致是文件,将其采用sha1进行加密)

2.服务端验证客户端传递(主要是根据设置,是否允许写死的字符串验证,是否有文件验证),验证成功就分配一个sessionid给客户端,同时把RSA的公钥发给客户端) 

3.客户端保存RSA公钥和sessionid.

4.客户端发送数据给服务端时。按照前面描述,同时要加上上面分配的sessionid.

5.服务端接收数据后,先用RSA解密,解析出AES的秘钥。需要提取sessionid.先检查sessionid是否还有效,当前设计是当天有效。如果有效就继续解析数据主题,无效就返回客户端错误信息。解析主题数据后处理业务,然后再以AES加密,传输。

根据什么的过程,客户端每次登录都需要验证一次,这样服务端可以控制RSA的变换和客户端的授权文件更新。

demo已经上传git,但是不能跑流程,网络部分是伪代码(注释)。没有写网络部分,想测试需要自己添加。demo只体现了设计过程。

   

   

 

 

 

posted @ 2019-03-09 23:53  IT苦行僧  阅读(710)  评论(0编辑  收藏  举报