微信存取探密—加密訊息的處理
在上一篇文章中,介紹了被動回調介面的抽象資料層次,並實作了一個高效的實體與XML互轉的基礎功能。細心的開發者在初次修改公眾號的基本配置時會發現一個名為「訊息加解密方式」的選項。展開後可供選擇的值為:「明文模式」(預設)、「相容模式」和「安全模式(建議)」。那麼這個安全模式又是什麼呢?如何適配安全模式呢?帶著這些問題,來進入微信接取的第三次探秘之旅。
可惡的流量劫持在文章的一開始,先給大家看兩張處於正常使用中的手機螢幕截圖:
在螢幕的右下角你會看到都有個綠色的水球顯示,這與要顯示的畫面格格不入,很明顯不是設計者為之。點開水球,顯示的是目前通訊套餐中剩餘的流量詳情。
從家庭區域網路到Internet再到IDC機房內網,我們的資料連結充滿了轉送的過程。我們的資料在經過任何一台設備的轉發時都有可能被其持久化保存起來。你的辦公室內網一定安全嗎?潛伏在你身邊的駭客,透過設定區域網路內某個網路卡為混雜模式(Promiscuous Mode)可以將區域網路中的所有資料都接收一份。可能你並不能發現什麼,然而你的私有資料已經被別人竊取。
使用安全模式保護使用者隱私
當啟用安全模式之後,被動回呼介面接收到的訊息就產生了很大的變化,形式如下所示:
<xml> <ToUserName><![CDATA[gh_38a2de904e09]]></ToUserName> <Encrypt><![CDATA[i7b8ccNA9OWDhau/F26aUWKFJ6Jd0imsDQIFPSdSfAg8mHT7rL0kIWSVpcqf6/dVSoOQOQK4T/CS3w96j4k3qcg89M6xn2RGZBs+9JkrsdRig5yhcia1B59akWb1t9QdutXqnl4edAqtXEh8SIs+N2HkOTTVldtOUHpdwLqRYuC4F6ejUoXui4xKuc3oyODR9edfL+xzZ7JfMJ1KUNF/YBJMj/Ba9y/CLLYmdFYOtCMH7tMUz8h+S0XKkHKN6r0ELLCIZJ9+PPlHZcfSGhwMLUeRF1nMIjXGEKHkI0uMcruh7wD96lMU/RFgJDjAk26xbmUYfa3l+34p+txw4R8iD3Q58S8Yekiy3lUsbk+C6eDeefGs1ck23BQ8xWU3AReWH2dEsY6SYIkb3ANeyJmcoIKZfpc/31njp0KcHAxL1Lk=]]></Encrypt> </xml>
可以看出,明文部分保留了該訊息的公眾號原始ID:gh_38a2de904e09,其餘部分均為加密文字(這種結構可以使得同一個後台系統,接入多個公眾號,再利用每個公眾號的設定進行分別解密)。由於加密結構在官方文件(http://qydev.weixin.qq.com/wiki/index.php?title=加解密函式庫下載與回傳碼)並沒有明確的闡述,這裡就給大家詳細說明一下。
如果讀者以前開發過網路協定應該很容易理解這個結構,典型的不定長訊息。一定會有一個標識來指明不定長區域的長度,讀取時以該值為準,在定長資料之後讀取若干位元組。在結構的開頭,有16位元組隨機數,該部分資料無實際意義,可用於後續返回加密訊息時作為隨機數的填充資料。
安全模式的簽章驗證方法
微信的被動回呼介面其實是一個HTTP POST請求,我們都知道HTTP請求分為請求頭和請求體。微信巧妙地將加密的XML資料放在了請求體,將驗證簽章時使用的參數放入了請求頭。
POST /cgi-bin/wxpush? msg_signature=477715d11cdb4164915debcba66cb864d751f3e6×tamp=1409659813&nonce=1372623149 HTTP/1.1 Host: qy.weixin.qq.com Content-Length: 613 <xml> <ToUserName><![CDATA[wx5823bf96d3bd56c7]]></ToUserName> <Encrypt><![CDATA[RypEvHKD8QQKFhvQ6QleEB4J58tiPdvo+rtK1I9qca6aM/wvqnLSV5zEPeusUiX5L5X/0lWfrf0QADHHhGd3QczcdCUpj911L3vg3W/sYYvuJTs3TUUkSUXxaccAS0qhxchrRYt66wiSpGLYL42aM6A8dTT+6k4aSknmPj48kzJs8qLjvd4Xgpue06DOdnLxAUHzM6+kDZ+HMZfJYuR+LtwGc2hgf5gsijff0ekUNXZiqATP7PF5mZxZ3Izoun1s4zG4LUMnvw2r+KqCKIw+3IQH03v+BCA9nMELNqbSf6tiWSrXJB3LAVGUcallcrw8V2t9EL4EhzJWrQUax5wLVMNS0+rUPA3k22Ncx4XXZS9o0MBH27Bo6BpNelZpS+/uh9KsNlY6bHCmJU9p8g7m3fVKn28H3KDYA5Pl/T8Z1ptDAVe0lXdQ2YoyyH2uyPIGHBZZIs2pDBS8R07+qN+E7Q==]]></Encrypt> </xml>
簽名產生的過程:
透過上述計算,現在得出了目前加密訊息的簽章calculated_sign,然後從請求頭中取得參數msg_signature ,如果calculated_sign和msg_signature相同,則表示訊息沒有被竄改。這種簽章策略利用的數學難題有:
1. SHA1摘要演算法對全部資料進行了計算,有任何改動最終的摘要都會改變;
2. Token是事先設定好的,在傳輸過程中並不包含,無從破解;
3. 時間戳記和隨機字元的引入,使得即便明文相同,每一次加密密文都有不同,給破解AES加密增加難度
簽名驗證成功之後就可以放心使用解密後的明文了。明文的格式和先前文章介紹的格式一致,因此解密後的業務處理邏輯可以重複使用。
作為安全模式的回應,回傳的XML格式也應該是加密的,整個加密過程與解密過程方向相反,這裡就不再贅述了。
更多微信存取探密—加密訊息的處理相關文章請關注PHP中文網!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

閒魚官方微信小程式悄悄上線,在小程式中可以發布閒置與買家/賣家私訊交流、查看個人資料及訂單、搜尋物品等,有用好奇閒魚微信小程式叫什麼,現在快來看一下。閒魚微信小程式叫什麼答案:閒魚,閒置交易二手買賣估價回收。 1、在小程式中可以發布閒置、與買家/賣家私訊交流、查看個人資料及訂單、搜尋指定物品等功能;2、在小程式的頁面中有首頁、附近、發閒置、訊息、我的5項功能;3、想要使用的話必要要開通微信支付才可以購買;

微信小程式實現圖片上傳功能隨著行動網路的發展,微信小程式已經成為了人們生活中不可或缺的一部分。微信小程式不僅提供了豐富的應用場景,還支援開發者自訂功能,其中包括圖片上傳功能。本文將介紹如何在微信小程式中實作圖片上傳功能,並提供具體的程式碼範例。一、前期準備工作在開始編寫程式碼之前,我們需要先下載並安裝微信開發者工具,並註冊成為微信開發者。同時,也需要了解微信

實現微信小程式中的下拉式選單效果,需要具體程式碼範例隨著行動互聯網的普及,微信小程式成為了網路開發的重要一環,越來越多的人開始關注和使用微信小程式。微信小程式的開發相比傳統的APP開發更加簡單快捷,但也需要掌握一定的開發技巧。在微信小程式的開發中,下拉式選單是一個常見的UI元件,實現了更好的使用者操作體驗。本文將詳細介紹如何在微信小程式中實現下拉式選單效果,並提供具

實現微信小程式中的圖片濾鏡效果隨著社群媒體應用程式的流行,人們越來越喜歡在照片中應用濾鏡效果,以增強照片的藝術效果和吸引力。在微信小程式中也可以實現圖片濾鏡效果,為使用者提供更多有趣和創意的照片編輯功能。本文將介紹如何在微信小程式中實現圖片濾鏡效果,並提供具體的程式碼範例。首先,我們需要在微信小程式中使用canvas元件來載入和編輯圖片。 canvas元件可以在頁面

閒魚官方微信小程式已經悄悄上線,它為用戶提供了一個便捷的平台,讓你可以輕鬆地發布和交易閒置物品。在小程式中,你可以與買家或賣家進行私訊交流,查看個人資料和訂單,以及搜尋你想要的物品。那麼閒魚在微信小程式中究竟叫什麼呢,這篇教學攻略將為您詳細介紹,想要了解的用戶們快來跟著本文繼續閱讀吧!閒魚微信小程式叫什麼答案:閒魚,閒置交易二手買賣估價回收。 1、在小程式中可以發布閒置、與買家/賣家私訊交流、查看個人資料及訂單、搜尋指定物品等功能;2、在小程式的頁面中有首頁、附近、發閒置、訊息、我的5項功能;3、

使用微信小程式實現輪播圖切換效果微信小程式是一種輕量級的應用程序,具有簡單、高效的開發和使用特點。在微信小程式中,實作輪播圖切換效果是常見的需求。本文將介紹如何使用微信小程式實現輪播圖切換效果,並給出具體的程式碼範例。首先,在微信小程式的頁面檔案中,新增一個輪播圖元件。例如,可以使用<swiper>標籤來實現輪播圖的切換效果。在該組件中,可以透過b

實作微信小程式中的滑動刪除功能,需要具體程式碼範例隨著微信小程式的流行,開發者在開發過程中經常會遇到一些常見功能的實作問題。其中,滑動刪除功能是常見、常用的功能需求。本文將為大家詳細介紹如何在微信小程式中實現滑動刪除功能,並給出具體的程式碼範例。一、需求分析在微信小程式中,滑動刪除功能的實作涉及以下要點:列表展示:要顯示可滑動刪除的列表,每個列表項目需要包

實現微信小程式中的圖片旋轉效果,需要具體程式碼範例微信小程式是一種輕量級的應用程序,為用戶提供了豐富的功能和良好的用戶體驗。在小程式中,開發者可以利用各種元件和API來實現各種效果。其中,圖片旋轉效果是一種常見的動畫效果,可以為小程式增添趣味性和視覺效果。在微信小程式中實作圖片旋轉效果,需要使用小程式提供的動畫API。以下是一個具體的程式碼範例,展示如何在小程
