电竞比分网-中国电竞赛事及体育赛事平台

分享

軍方讓我做即時(shí)通訊,好好交代一下網(wǎng)絡(luò)安全問(wèn)題(附源碼)

 quasiceo 2016-07-15
  •    由于Boss跟軍方的特殊關(guān)系,我們又接到了軍方的項(xiàng)目,這次呢是做一個(gè)即時(shí)通訊系統(tǒng)。雖然Boss跟軍方很鐵,拿到的項(xiàng)目款也很多,系統(tǒng)并不是很難,但是項(xiàng)目還是要好好做。無(wú)論如何,對(duì)系統(tǒng)的性能、友好性、安全性都還是要求很高的。30W也不是輕易就能搞到的。當(dāng)然,也不算難,上周就已經(jīng)發(fā)錢、發(fā)錢、發(fā)錢了!總共也就只不過(guò)花了2周而已。

      在此首先要感謝一下園子里的大大大大神GG無(wú)私奉獻(xiàn)出的GGtalk,Boss說(shuō)了,過(guò)兩天聯(lián)系上了一定發(fā)一個(gè) 5K 的大大大紅包!

      今天呢主要想總結(jié)一波網(wǎng)絡(luò)安全的問(wèn)題。這也是軍方最關(guān)心的。

一.網(wǎng)絡(luò)安全的四種威脅 

    1.截獲(比如抓包抓到了你傳輸?shù)南ⅲ?/span>      

    2.篡改(截獲消息然后修改掉再發(fā)送,破壞消息的完整性)

    3.偽造 (比如非法源站冒充合法源站給目的站發(fā)消息)         

    4.拒絕服務(wù)(向目的站發(fā)起大量的惡意連接或者發(fā)送大量無(wú)意義消息使得服務(wù)癱瘓)

 

二.兩種加密方式

     1.對(duì)稱加密

      對(duì)稱加密就是加密秘鑰和解密秘鑰是相同的,其中具有代表性的就是DES算法。DES算法是公開(kāi)的,但是秘鑰是保密的,而保密性是由秘鑰決定的。

     2.非對(duì)稱加密

        非對(duì)稱加密就是加密秘鑰和解密秘鑰是不一樣的。其中公鑰、加密算法、解密算法都是公開(kāi)的,而私鑰是保密的,非對(duì)稱加密的保密性是由私鑰來(lái)保障的。

    

三.防火墻

    

      防火墻顧名思義就是一睹隔離危險(xiǎn)的墻,能夠阻止惡意的入侵或攻擊,簡(jiǎn)而言之就是起到一個(gè)過(guò)濾的作用。其中分組過(guò)濾路由器能夠?qū)W(wǎng)絡(luò)層和傳輸層的數(shù)據(jù)進(jìn)行過(guò)濾。應(yīng)用網(wǎng)關(guān)也稱代理服務(wù)器,能夠?qū)?yīng)用層數(shù)據(jù)進(jìn)行過(guò)濾。 

四.即時(shí)通訊中的消息加密

      3DES(或稱為Triple DES)是非常常用的對(duì)稱加密算法,是對(duì)DES算法的增強(qiáng),它相當(dāng)于是對(duì)每個(gè)數(shù)據(jù)塊應(yīng)用三次DES加密算法。GG即時(shí)通信系統(tǒng)中有Des3Encryption這個(gè)工具類,用以實(shí)現(xiàn)對(duì)該算法的封裝。大家可以下載源碼然后拿到該文件。

1.發(fā)送聊天消息

      在得到聊天內(nèi)容后,先進(jìn)行簡(jiǎn)單的序列化,然后對(duì)序列化的結(jié)果進(jìn)行3DES加密:

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

  然后,將加密的結(jié)果通過(guò)IRapidPassiveEngine發(fā)送出去。

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

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

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

3.處理離線消息

      離線消息是當(dāng)接收者不再時(shí),將該聊天消息暫存在服務(wù)器上,等接收者上線時(shí),再發(fā)送給他。所以,離線消息的解密處理與普通聊天消息的處理是一樣的。

復(fù)制代碼
    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);           
        }
    }
復(fù)制代碼

4.聊天記錄如何處理?   

      根據(jù)上面的流程描述,我們可以知道,在服務(wù)端看到的聊天消息是經(jīng)過(guò)加密的,而GGTalk在服務(wù)端有將聊天記錄存儲(chǔ)到數(shù)據(jù)庫(kù)中的功能,因此,數(shù)據(jù)庫(kù)中聊天內(nèi)容那一列存儲(chǔ)的數(shù)據(jù)也是加密的。在GG即時(shí)通信系統(tǒng)中,服務(wù)端不需要查看聊天消息的真正內(nèi)容,所以,服務(wù)端不需要使用到Des3Encryption類。GG在客戶端本地也有存儲(chǔ)聊天記錄(使用Sqlite),與服務(wù)器上數(shù)據(jù)庫(kù)中存儲(chǔ)的不一樣的是,本地存儲(chǔ)的是明文的。所以,在查看聊天記錄時(shí),要根據(jù)用戶選擇的是從本地查看還是從服務(wù)器查看來(lái)決定是否需要對(duì)數(shù)據(jù)進(jìn)行解密:

復(fù)制代碼
    byte[] decrypted = record.Content;
    if (this.skinRadioButton_Server.Checked)
    {
        if (GlobalResourceManager.Des3Encryption != null)
        {
            decrypted = GlobalResourceManager.Des3Encryption.Decrypt(decrypted);
        }
    }
    ChatBoxContent content = CompactPropertySerializer.Default.Deserialize<ChatBoxContent>(decrypted, 0);
復(fù)制代碼

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多