ホームページ > 記事 > WeChat アプレット > WeChat アクセスの探索 - 暗号化されたメッセージの処理
前回のブログ投稿では、パッシブ コールバック インターフェイスの抽象データ レベルを紹介し、エンティティを XML に変換するための効率的な基本関数を実装しました。注意深い開発者は、公式アカウントの基本構成を初めて変更するときに、「メッセージの暗号化と復号化方法」というオプションを見つけるでしょう。展開後に選択できる値は、「クリアテキストモード」(デフォルト)、「互換モード」、「セーフモード(推奨)」です。では、このセーフモードとは何でしょうか?セーフモードに適応するにはどうすればよいですか?これらの質問を念頭に置いて、WeChat アクセスの 3 番目の探索の旅に入ってみましょう。
忌まわしいトラフィックハイジャック 記事の冒頭で、通常使用中の携帯電話のスクリーンショットを 2 枚お見せします。
画面の右下隅に、緑色の水球の表示があります。表示される画像と互換性がありませんが、明らかにデザイナーのせいではありません。水風船をクリックすると、現在の通信パッケージの残りのトラフィックの詳細が表示されます。
家庭内 LAN からインターネット、IDC コンピューター室のイントラネットに至るまで、当社のデータ リンクは転送プロセスでいっぱいです。当社のデータは、任意のデバイスによって転送されるときに永続化および保存される場合があります。あなたのオフィスのイントラネットは安全ですか?周囲に潜んでいるハッカーは、LAN 内の特定のネットワーク カードをプロミスキャス モードに設定することで、LAN 内のすべてのデータのコピーを受け取ることができます。何も見つからないかもしれませんが、あなたの個人データは他人に盗まれています。
ユーザーのプライバシーを保護するためにセーフモードを使用してください
セーフモードが有効になると、パッシブコールバックインターフェイスによって受信されるメッセージが大きく変化し、形式は次のようになります:
<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 バイトの乱数がありますが、この部分のデータには実際的な意味はなく、後で暗号化されたメッセージを返すときに乱数のパディング データとして使用できます。
セーフモード署名検証方法
WeChat のパッシブ コールバック インターフェイスは、実際には HTTP POST リクエストであることは誰もが知っています。HTTP リクエストはリクエスト ヘッダーとリクエスト本文に分かれています。 WeChat は暗号化された 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が取得され、calculated_signとmsg_signatureが同じ場合、パラメータmsg_signatureがリクエストヘッダーから取得されます。 、これはメッセージが改ざんされていないことを意味します。この署名戦略で利用される数学的問題は次のとおりです。
1. SHA1 ダイジェスト アルゴリズムはすべてのデータを計算し、最終的なダイジェストへの変更は変更されます。
2. トークンは事前に設定されており、送信プロセスには含まれません。解読は不可能です。
3. タイムスタンプとランダムな文字の導入により、平文が同じであっても暗号文が毎回異なり、AES 暗号化の解読がより困難になります
署名検証が成功すると、安全に使用できます。復号化された平文。平文の形式は前回紹介した形式と一致しているため、復号化された業務処理ロジックを再利用できます。
セーフ モードへの応答として、返される XML 形式も暗号化する必要があります。暗号化プロセス全体は復号化プロセスとは逆の方向に行われるため、ここでは詳しく説明しません。
その他の WeChat アクセス探索暗号化メッセージ処理関連記事については、PHP 中国語 Web サイトに注目してください。