tcp/ip网络通讯安全加密方法[通俗易懂]

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(
"-----------------------------------------------------------"
);

 

tcp/ip网络通讯安全加密方法[通俗易懂]

为了应用更安全,针对不同的连接生成不同的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();

tcp/ip网络通讯安全加密方法[通俗易懂]

    通过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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144062.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • iocp详解_iocp是异步io吗

    iocp详解_iocp是异步io吗#include”SOCKET.h”#includeDWORDWINAPIThreadProc(LPVOIDpvParam);#definePORT8080#defineLISTEN_QUEUE200//AcceptEx和GetAcceptExSockaddrs的函数指针,用于调用这两个扩展函数LPFN_ACCEPTEX       

  • 各种数据库默认端口总结

    各种数据库默认端口总结关系型数据库一 :Oracle驱动:oracle.jdbc.driver.OracleDriverURL:jdbc:oracle:thin:@<machine_name><:port>:dbname注:machine_name:数据库所在的机器的名称,如果是本机则是127.0.0.1或者是localhost,如果是远程连接,则是远程的IP地址;port:端口号,默…

  • ABA问题_乐观锁aba引发的实际问题

    ABA问题_乐观锁aba引发的实际问题ABA问题一.概述:二.什么是ABA问题?三.ABA问题的解决:原子引用:(存在ABA问题)带版本号的原子引用(解决ABA问题)一.概述:ABA问题是在多线程并发的情况下,发生的一种现象。上一次记录了有关CAS操作的一些知识,CAS通过比较内存中的一个数据是否是预期值,如果是就将它修改成新值,如果不是则进行自旋,重复比较的操作,直到某一刻内存值等于预期值再进行修改。而ABA问题则是在CAS操作中存在的一个经典问题,这个问题某些时候不会带来任何影响,某些时候却是影响很大的。二.什么是ABA问题?理解一

    2022年10月23日
  • Ubuntu下很给力的下载工具

    Ubuntu下很给力的下载工具

  • 微商分销功能不能用了

    微商分销功能不能用了“三级以上分销将会被停止支付功能和封停账号”,日前一则“不利”消息彻底引爆微商的主要阵地——微信朋友圈。一时间关于分销三级变二级、微商寒冬将至的说法再次疯传。自央视曝光部分微商涉嫌传销之后,微信今年接连对微商们“动刀”,强化管理意在行业正规化发展,失去多级分销之后,依靠内容深度揽客的方式成为微商转型的方向。微商连遭重创刚刚过去的一周,微商们再次体验到了人生的跌宕起伏。认证为腾讯微信

  • Blazor入门_blazor视频教程

    Blazor入门_blazor视频教程NOW现在行动!Blazor是一个基于C#,Razor和HTML的新的WebUI框架。它通过WebAssembly运行在浏览器中。有利于使用C#而…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号