HTML5技术

军方让我做即时通讯,好好交代一下网络安全问题(附源码) - 熬夜与烟

字号+ 作者:H5之家 来源:博客园 2016-06-14 10:00 我要评论( )

由于Boss跟军方的特殊关系,我们又接到了军方的项目,这次呢是做一个即时通讯系统。虽然Boss跟军方很铁,拿到的项目款也很多,系统并不是很难,但是项目还是要好好做。无论如何,对系统的性能、友好性、安全性都还是要求很高的。30W也不是轻易就能搞到的。当

      由于Boss跟军方的特殊关系,我们又接到了军方的项目,这次呢是做一个即时通讯系统。虽然Boss跟军方很铁,拿到的项目款也很多,系统并不是很难,但是项目还是要好好做。无论如何,对系统的性能、友好性、安全性都还是要求很高的。30W也不是轻易就能搞到的。当然,也不算难,上周就已经发钱、发钱、发钱了!总共也就只不过花了2周而已。

      在此首先要感谢一下园子里的大大大大神GG无私奉献出的GGtalk,Boss说了,过两天联系上了一定发一个 5K 的大大大红包!

      今天呢主要想总结一波网络安全的问题。这也是军方最关心的。

一.网络安全的四种威胁 

    1.截获(比如抓包抓到了你传输的消息)      

    2.篡改(截获消息然后修改掉再发送,破坏消息的完整性)

    3.伪造 (比如非法源站冒充合法源站给目的站发消息)         

    4.拒绝服务(向目的站发起大量的恶意连接或者发送大量无意义消息使得服务瘫痪)

  二.两种加密方式      1.对称加密

      对称加密就是加密秘钥和解密秘钥是相同的,其中具有代表性的就是DES算法。DES算法是公开的,但是秘钥是保密的,而保密性是由秘钥决定的。

     2.非对称加密

        非对称加密就是加密秘钥和解密秘钥是不一样的。其中公钥、加密算法、解密算法都是公开的,而私钥是保密的,非对称加密的保密性是由私钥来保障的。

   

 

三.防火墙

    

      防火墙顾名思义就是一睹隔离危险的墙,能够阻止恶意的入侵或攻击,简而言之就是起到一个过滤的作用。其中分组过滤路由器能够对网络层和传输层的数据进行过滤。应用网关也称代理服务器,能够对应用层数据进行过滤。 

四.即时通讯中的消息加密

      3DES(或称为Triple DES)是非常常用的对称加密算法,是对DES算法的增强,它相当于是对每个数据块应用三次DES加密算法。GG即时通信系统中有Des3Encryption这个工具类,用以实现对该算法的封装。大家可以下载源码然后拿到该文件。

1.发送聊天消息

      在得到聊天内容后,先进行简单的序列化,然后对序列化的结果进行3DES加密:

 

ChatBoxContent content = this.chatBoxSend.GetContent(); byte[] buff = CompactPropertySerializer.Default.Serialize(content); byte[] encrypted = buff; if (GlobalResourceManager.Des3Encryption != null) { encrypted = GlobalResourceManager.Des3Encryption.Encrypt(buff); }

 

  然后,将加密的结果通过IRapidPassiveEngine发送出去。

2.处理接收到的聊天消息

     接收到1对1的聊天消息或是群聊天消息后,首先要做的是解密,然后再反序列化:

 

byte[] decrypted = info; if (GlobalResourceManager.Des3Encryption != null) { decrypted = GlobalResourceManager.Des3Encryption.Decrypt(info); } ChatBoxContent content = CompactPropertySerializer.Default.Deserialize<ChatBoxContent>(decrypted, 0);

 

3.处理离线消息

      离线消息是当接收者不再时,将该聊天消息暂存在服务器上,等接收者上线时,再发送给他。所以,离线消息的解密处理与普通聊天消息的处理是一样的。

 

if (informationType == InformationTypes.OfflineMessage) { byte[] bChatBoxContent = null; OfflineMessage msg = CompactPropertySerializer.Default.Deserialize<OfflineMessage>(info, 0); if (msg.InformationType == InformationTypes.Chat) //目前只处理离线的聊天消息 { sourceUserID = msg.SourceUserID; bChatBoxContent = msg.Information; byte[] decrypted = bChatBoxContent; if (GlobalResourceManager.Des3Encryption != null) { decrypted = GlobalResourceManager.Des3Encryption.Decrypt(bChatBoxContent); } ChatBoxContent content = CompactPropertySerializer.Default.Deserialize<ChatBoxContent>(decrypted, 0); } }

 

4.聊天记录如何处理?   

      根据上面的流程描述,我们可以知道,在服务端看到的聊天消息是经过加密的,而GGTalk在服务端有将聊天记录存储到数据库中的功能,因此,数据库中聊天内容那一列存储的数据也是加密的。在GG即时通信系统中,服务端不需要查看聊天消息的真正内容,所以,服务端不需要使用到Des3Encryption类。GG在客户端本地也有存储聊天记录(使用Sqlite),与服务器上数据库中存储的不一样的是,本地存储的是明文的。所以,在查看聊天记录时,要根据用户选择的是从本地查看还是从服务器查看来决定是否需要对数据进行解密:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 开源免费的.NET图像即时处理的组件ImageProcessor - 彭泽0902

    开源免费的.NET图像即时处理的组件ImageProcessor - 彭泽0902

    2017-03-18 11:01

  • 即时通信服务器架构的一些思考 - myd620

    即时通信服务器架构的一些思考 - myd620

    2016-11-20 17:00

  • 那些年我们一起过的JS闭包,作用域,this,让我们一起划上完美的句号。 - 追梦子

    那些年我们一起过的JS闭包,作用域,this,让我们一起划上完美的句号

    2016-08-19 18:00

  • mui 重写back 调用back方法,实现返回就即时刷新页面 - 柠檬真酸

    mui 重写back 调用back方法,实现返回就即时刷新页面 - 柠檬真酸

    2016-03-04 17:00

网友点评