• 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只体现了设计过程。

       

       

  • 相关阅读:
    什么是 go vendor
    Golang包管理工具之govendor的使用
    国内的go get问题的解决
    集群、限流、缓存 BAT 大厂无非也就是这么做
    Gin框架中文文档
    GO——beego简单开发实例(二)
    C++11 并发指南四(<future> 详解一 std::promise 介绍)(转)
    C++11 并发指南三(std::mutex 详解)(转)
    C++11 并发指南二(std::thread 详解)(转)
    用C++设计一个不能被继承的类(转)
  • 原文地址:https://www.cnblogs.com/jinyu20180311/p/10506212.html
Copyright © 2020-2023  润新知