ale*_*exg 3 .net c# sockets cryptography asyncsocket
我们有一个用C#编写的TCP/IP套接字服务器,用于将二进制文件传输到客户端.例如,剪辑,图像.带有回调的异步BeginSend/EndSend用于发送byte []缓冲区.
新要求是加密正在传输的数据.每个客户端连接都将为服务器提供加密密钥.实际的加密算法并不重要,即目标是简单地确保数据不是以明文形式发送的.即使是带有40位密钥的RC2CryptoServiceProvider就足够了......与RC2相比,使用128位密钥的RijndaelManaged是一种过度杀伤,而且是CPU密集型的.
在传输数据文件之前,当然可以先生成加密版本的数据文件.理想情况下,我们应该在文件中读取数据并在套接字上发送时动态加密文件.给定数据文件的大小,将整个文件内容读取到内存既不高效也不可扩展.
在动态加密文件中的数据以发送到套接字对等体时,是否有一些好的模式可供遵循?
有几种方法可以实现这一目标.这里有一些:
基础架构:与您的客户建立启用SSL/TLS的VPN.使用新的专用网络连接到客户端的网络.Pro:代码几乎没有变化,具体取决于您当前的实现.Con:取决于您客户的基础设施(以及您的基础设施!),可能无法实现.
SSL:在客户端和服务器之间建立直接安全的套接字层连接.亲:易于实施.CodeProject上有一个关于如何通过MS SSPI SSL和OpenSSL实现它的示例,您可以将其用作您自己实现的基础; 这是链接.Con:SSL 在考虑实施之前,您应该了解一些众所周知的安全问题.
常用算法(AES,DES,Triple DES,Blowfish):您可以在发送之前和接收通信层上的包之后使用的内部实现.Pro:公共可用的大量库,一些自.NET 3.5及更高版本以来可用的库.Con:正如你所提到的,有些可能有点矫枉过正.
自定义算法:创建自己的算法!让这些位摇一摇.亲:它可以像你想要的那样轻盈; 公共可用的破解工具几乎无用.这里有一个用于32位整数的简单自定义加密协议的示例,可以轻松适应更大的内容.Con:公共算法经过全面测试和验证,确保您的实施可能达不到的安全级别; 重新发明轮子的理由很少.
当然,如果您需要额外的安全性(例如通过SSL连接的AES加密内容),您可以混合使用两个或更多,但您可以自行决定.
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |