ホームページ  >  記事  >  WeChat アプレット  >  WeChat パブリック プラットフォームの開発: メッセージの暗号化

WeChat パブリック プラットフォームの開発: メッセージの暗号化

高洛峰
高洛峰オリジナル
2017-02-27 13:36:583038ブラウズ

少し前まで、WeChat のエンタープライズ アカウントでは必須のメッセージ暗号化が使用されていましたが、その後、公式アカウントにもオプションのメッセージ暗号化オプションが追加されました。現時点では、エンタープライズアカウントと公式アカウントの暗号化方式は同じです(形式は若干異なります)。

暗号化設定

公式アカウントの背景にある「デベロッパーセンター」に入ると、URLドッキングの設定が表示されます:

WeChat パブリック プラットフォームの開発: メッセージの暗号化

[設定の変更]をクリックして変更ページに入ります:

WeChat パブリック プラットフォームの開発: メッセージの暗号化

暗号化 全部で3つの方法があります:

平文モード、オリジナルのメッセージ形式です

互換モード、平文と暗号文が共存し、正式にリリースされた製品の使用は推奨されません(平文が含まれており、暗号化を実現できないため)暗号化効果)

セキュア モード。このモードではメッセージが暗号化され、開発者のサーバーは公式アルゴリズムを通じてメッセージを復号化し、平文モードで元のメッセージを取得できます。

暗号化されたメッセージの場合、返される情報も暗号化する必要があります。

暗号化された情報の処理

Senparc.Weixin.MP は 3 種類のメッセージを自動的に判断します。開発プロセス中に復号化と暗号化のプロセスに注意を払う必要はなく、開発プロセスを「平文」のまま維持できます。モード"。

対応する MessageHandler では、いくつかのパラメーターを通じて現在の暗号化ステータスを知ることができます:

MessageHandler.UsingEcryptMessage: 暗号化された情報 (互換モードとセキュリティ モードを含む) が使用されているかどうか

MessageHandler.UsingCompatibilityModelEcryptMessage: 互換モード暗号化が使用されているかどうか

上記 2 つの属性を組み合わせることで、アカウントが現在どの暗号化モードを使用しているかを知ることができます (もちろん、ほとんどの場合、開発者は気にする必要はありません)。

情報をより良く追跡するために、MessageHandler は FinalResponseDocument 属性を追加しました:

MessageHandler.ResponseDocument: プレーン テキスト構造の応答データ XML オブジェクト

MessageHandler.FinalResponseDocument: 最終的にサーバーに返される XML オブジェクト、暗号化されていないこの場合、ResponseDocument と一致しますが、それ以外の場合は自動的に暗号化されます

暗号化の原則

暗号化アルゴリズム (複数の言語でのサンプルのダウンロードを含む) は、公式ヘルプドキュメントで見つけることができます: http://mp.weixin。 qq.com/wiki/index.php?title=%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88

ここで説明したいのはEncodingAESKeyについてです。少し混乱します。実際、EncodingAESKey は AESKey の Base64 エンコードであり、AESKey は長さ 32 のランダムな文字列 (a ~ z、A ~ Z、0 ~ 9 から選択) です。 32 文字の Base64 エンコード長は 44 (最後の文字は =) に固定されているため、= を削除すると、最終的な 43 文字の EncodingAESKey が生成されます。 EncodingAESKey はメッセージの暗号化と復号化のプロセスで使用され、厳密な機密性が要求されます。

以下は、EncodingAESKey を生成するための C# コードの一部です:

protected string CreateEncodingAESKey()
        {
            string aesKey = GetRadomStr(32);//获得a-z,A-Z,0-9的随机字符串
            var encodingAesKey = Convert.ToBase64String(Encoding.UTF8.GetBytes(aesKey), Base64FormattingOptions.None);
            return encodingAesKey.Substring(0, encodingAesKey.Length - 1);
        }


WeChat パブリック プラットフォーム開発: メッセージ暗号化関連記事の詳細については、PHP 中国語 Web サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。