开发者社区> nothingfinal> 正文

tcp/ip网络通讯安全加密方法

简介: tcp/ip网络通讯安全是一个广受关注的话题,现在也有一些基于tcp/ip加密技术标准如SSL,TLS等。但很多时候编写一些简单的网络通讯把这标准加密应用添加进来乎一下子把程序变得复杂了,而实现自己的加密算法那就更加不可取;其实通过一些现有的加密的技术应用完全可以实现即简单又安全的网络通讯程序。
+关注继续查看

tcp/ip网络通讯安全是一个广受关注的话题,现在也有一些基于tcp/ip加密技术标准如SSL,TLS等。但很多时候编写一些简单的网络通讯把这标准加密应用添加进来乎一下子把程序变得复杂了,而实现自己的加密算法那就更加不可取;其实通过一些现有的加密的技术应用完全可以实现即简单又安全的网络通讯程序。首先保证网络通讯安全有两个方面,第一保证连接的有效性,其二就是保证内容即使被人拦截也难以从内容得到相关信息。

连接有效性

平常写网络程序在允许一个连接接入操作的时候,我们一般要对它进行一个有效性验证,如提供用户名密码或签名。

签名:

通过用户提供一分数据和数据相关签名信息,对方进行一个有效性验证。那这个数据和签名数据怎么做呢,其实现有加密技术中已经有一种描述提供了这种解决方案那就是RSA(非对称加密)。可以通过 RSA 的持有privatekey和publickey方进行一个数据签名,对方通过publickey进行一个验证.如果publickey和privatekey是配对的情况,那持有publickey就能验证成功,否则就会验证失败。在连接进行操作前可以通过这种方式进行处理,签名有效允许连接操作,无效的话可以直接把连接关闭。

下面介绍通过c#如何实现这种签名:

1
2
3
4
5
6
RasCrypto pri = new RasCrypto();
RasCrypto pub = new RasCrypto();
pub.PublicKey = pri.PublicKey;
string name = "henry";
string singdata = pri.Sign(name);
Console.WriteLine(pub.Verify(name, singdata));

RasCrypto是通过封装的类,源代码可以通过https://smarkdata.svn.codeplex.com/svn/Smark/Smark.Core/Smark.Core/RasCrypto.cs获取;在实际使用中最好是根据不同签名有不同的密对,这样即使某签名的密对被盗也不会影响其他用户的安全。

用户名密码:

基于用户名和密码验证是一种很常见的方式,但有个问题就是如何保证用户名和密码在通讯过程即使被截取了也难以得到用户名和密码呢?其实通过 RSA 也能够很好地解决这一问题。 RSA 提供public key加密而private key解密的方式,可以把public key提供给请求方就行了,private key保存在服务端;这样就可以保证加密的东西只有服务端才有解密,即使加密信息被其他人拦截也难以获取原有信息。

下面介绍通过c#使用ras进行加解密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
RasCrypto server = new RasCrypto();
RasCrypto client = new RasCrypto();
client.PublicKey = server.PublicKey;
string name = "henry";
string pwd = "123456";
string ename = client.Encrypt(name);
string epwd = client.Encrypt(pwd);
string dname = server.Decrypt(ename);
string dpwd = server.Decrypt(epwd);
Console.WriteLine("name:{0}", name);
Console.WriteLine("pwd:{0}", pwd);
Console.WriteLine("-----------------------------------------------------------");
Console.WriteLine("ename:{0}", ename);
Console.WriteLine("epwd:{0}", epwd);
Console.WriteLine("-----------------------------------------------------------");
Console.WriteLine("dname:{0}", dname);
Console.WriteLine("dpwd:{0}", dpwd);
Console.WriteLine("-----------------------------------------------------------");

 

为了应用更安全,针对不同的连接生成不同的RSA密对,这样就能保证每个连接的各自安全性.

信息加密

前面提到的 RSA 可以进行数据加解密,其安全性也非常可靠;但有个缺点就是RSA对数据比多的时候加密比较慢,有些 RSA 加密的实现还有数据长度的限制。所以在很多情况下就要选择别的加密方式,这里介绍DES(对称加密)。不过对称加密有个缺点就是密对双方都必须一样,这样就会导致一个问题就从某一方获取密对就能对数据加密和解密工作。所以对称加的密对保护就显示非常重要的,这个工作可以交给 RSA 来做。

以下是c#运用 RSA +DES的加解密方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
RasCrypto server = new RasCrypto();
 RasCrypto client = new RasCrypto();
 client.PublicKey = server.PublicKey;
 DESCrypto serverdes = new DESCrypto();
 DESCrypto clientdes = new DESCrypto();
 //获取没加密的key,iv
 DESCrypto.DESInfo info = clientdes.KeyInfo;
 Console.WriteLine("KEY: "+Smark.Core.Functions.ToString(info.Key));
 Console.WriteLine("IV: "+Smark.Core.Functions.ToString(info.IV));
 Console.WriteLine("");
 //设置相应的RSA信息
 serverdes.PrivateRas = server;
 clientdes.PublicRas = client;
 //获取了设置RSA信息的key,iv
 info = clientdes.KeyInfo;
 Console.WriteLine("KEY: " + Smark.Core.Functions.ToString(info.Key));
 Console.WriteLine("IV: " + Smark.Core.Functions.ToString(info.IV));
 //数据加密
 serverdes.KeyInfo = info;
 string value = "henryfan@msn.com", evalue = null, dvalue = null;
 evalue = serverdes.Encrypt(value);
 dvalue = clientdes.Decrypt(evalue);
 Console.WriteLine("VALUE: " + value);
 Console.WriteLine("EVALUE: " + evalue);
 Console.WriteLine("DVALUE: " + dvalue);
 Console.WriteLine("");
 evalue = clientdes.Encrypt(value);
 dvalue = serverdes.Decrypt(evalue);
 Console.WriteLine("VALUE: " + value);
 Console.WriteLine("EVALUE: " + evalue);
 Console.WriteLine("DVALUE: " + dvalue);
 Console.WriteLine("");
 Console.Read();

    通过RSA和DES就能够简单地实现可靠的网络通讯安全,不过有些朋友喜欢构建自己的加密方法,在这里并不见意这样做;因为自己构建的加密方法的可靠性并没有得到验证,并不像现有的加密方法经过长时候实践和大量的应用总结出来。

相关资料:

DES http://zh.wikipedia.org/wiki/%E8%B3%87%E6%96%99%E5%8A%A0%E5%AF%86%E6%A8%99%E6%BA%96 

RSA http://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95

 

c#组件设计交流群:47164588 
c# socket :136485198 微博http://weibo.com/ikende

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
谷歌开源 PSP 安全协议:Offload 友好,节省约 0.5% 处理能力
近日,谷歌宣布将用于加密传输的 PSP 安全协议开源。这是一种类似于 TLS 的协议,独立于传输,支持每个连接的安全性,并且对 Offload 友好。
4 0
iOS逆向-day11:代码混淆
iOS逆向-day11:代码混淆
5 0
Linux - 基础篇(上)
Linux - 基础篇(上)
6 0
〖Redis指南①〗快速入门|配置文件|运行镜像|数据结构|常用命令|客户端
Redis诞生于2009年全称是Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库。
6 0
第九章 Android Gradle高级自定义
这一章主要针对项目中可以用到的一些实用功能来介绍Android Gradle,比如如何隐藏我们的证书文件,降低风险;如何批量修改生成的apk文件名,这样我们就可以修改成我们需要的,从文件名中就可以看到渠道,版本号以及生成日期等信息,这多方便啊;还有其他突破65535方法的限制等等。
4 0
Java 8 新特性:泛型目标类型推断
Java 8 新特性:泛型目标类型推断
5 0
第八章 自定义Android Gradle工程
Android Gradle为我们提供了大量的DSL,我们使用这些DSL定义配置我们的工程以满足我们项目中不同的需求。这些DSL有很多,在上一章演示Android Gradle工程示例的时候,我们已经大概介绍了compileSdkVersion、buildToolsVersion以及defaultConfig等,这一章我们再详细介绍一些常用的DSL配置,这些配有有签名信息、构建类型、代码混淆、zipAlign对齐压缩等。
5 0
ECS使用体验
在了解到相关文章“飞天加速计划·高校学生在家实践”活动,本人积极参与该活动,为此特撰写了一篇ECS使用体验。
6 0
阿里云混合云:如何成为被政企信赖的同行者
这可能是行业首本专为#混合云#打造的技术干货宝典,想要更懂#政企如何数智创新#,看这本就够了!
8 0
+关注
nothingfinal
软件开发,安全加密
1069
文章
341
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载