WeChat開発入門 (6) ユーザーデータの復号化
グループ内の何人かの友人がミニ プログラム ユーザー データの復号化プロセスについて質問しているのをよく見かけます。そのため、ミニ プログラム ユーザーの機密データの復号化に関するチュートリアルを書く予定です。
暗号化プロセスは WeChat サーバー上で完了し、復号化プロセスはミニプログラムと独自のサーバー上で完了します。つまり、次のデータがencryptDataから取得されます:
{ "openId": "OPENID", "nickName": "NICKNAME", "gender": GENDER, "city": "CITY", "province": "PROVINCE", "country": "COUNTRY", "avatarUrl": "AVATARURL", "unionId": "UNIONID", "watermark": { "appid":"APPID", "timestamp":TIMESTAMP } }
準備知識:
上記の3点は、復号プロセスを理解するために非常に重要です。
公式ドキュメントに従って、一般的な復号プロセスを次のように整理しました:
アプレットクライアントは wx.login を呼び出し、コールバックには js_code が含まれます。
次に、js_code をサーバー A (開発者サーバー) に送信します。サーバー A は、ユーザーの openid と session_key (セッション キー) と引き換えに、js_code、appId、secretkey、およびgrant_type パラメーターを使用して WeChat サーバーへのリクエストを開始します。
サーバー A が session_key を取得した後、3rdSessionId をキーとして、session_key + openid を値として使用して 3rd_session と呼ばれる乱数を生成しますredis または memcached にキャッシュ します。直接推奨 session_key はネットワーク経由で送信され、開発者は session_key に関連付ける一意のキーを生成します。その機能は次のとおりです:
- 3rdSessionId をクライアントに返し、ミニ プログラムのログイン ステータスを維持します。
- 3rdSessionId を通じてユーザー session_key と openid を検索します。
- クライアントが 3rdSessionId を取得すると、それはストレージにキャッシュされます。
- ユーザーの機密データの encryptedData は、wx.getUserIinfo を通じて取得できます。
- クライアントは、encryptedData、3rdSessionId、オフセットを一緒にサーバーAに送信します
- サーバーAは、3rdSessionIdに基づいてキャッシュからsession_keyを取得します
- AESを使用してサーバーAのencryptedDataを復号化し、ユーザーの機密データ
AES 復号化の 3 つのパラメーター:
- ciphertext encryptedData
- key aesKey
- offset Vector iv
- ciphertextオフセット ベクトルはクライアントによって提供されます。 クライアントそれをサーバーに送信し、サーバー上の 2 つのパラメーターは Base64_decode
デコード です。
- 3rdSessionId に基づいてキャッシュから session_key を取得し、session_key を Base64_decode して aesKey、aes キーを取得します。
- aes復号化メソッドを呼び出します。アルゴリズムはAES-128-CBCで、データはPKCS#7で埋められます。
var that = this;wx.login({success: function (res) { //微信js_code that.setData({wxcode: res.code}); //获取用户信息 wx.getUserInfo({ success: function (res) { //获取用户敏感数据密文和偏移向量 that.setData({encryptedData: res.encryptedData}) that.setData({iv: res.iv}) } })}})
var httpclient = require('../../utils/httpclient.js') VAR that = this//httpclient.req(url, data, method, success, fail)httpclient.req( 'http://localhost:8090/wxappservice/api/v1/wx/getSession', { apiName: 'WX_CODE', code: this.data.wxcode }, 'GET', function(result){ var thirdSessionId = result.data.data.sessionId; that.setData({thirdSessionId: thirdSessionId}) //将thirdSessionId放入小程序缓存 wx.setStorageSync('thirdSessionId', thirdSessionId) }, function(result){ console.log(result) });
//httpclient.req(url, data, method, success, fail)httpclient.req('http://localhost:8090/wxappservice/api/v1/wx/decodeUserInfo', { apiName: 'WX_DECODE_USERINFO', encryptedData: this.data.encryptedData, iv: this.data.iv, sessionId: wx.getStorageSync('thirdSessionId') }, 'GET', function(result){ //解密后的数据 console.log(result.data) }, function(result){ console.log(result) });
/** * 解密用户敏感数据 * @param encryptedData 明文 * @param iv 加密算法的初始向量 * @param sessionId 会话ID * @return */@Api(name = ApiConstant.WX_DECODE_USERINFO)@RequestMapping(value = "/api/v1/wx/decodeUserInfo", method = RequestMethod.GET, produces = "application/json")public Map<String,Object> decodeUserInfo(@RequestParam(required = true,value = "encryptedData")String encryptedData, @RequestParam(required = true,value = "iv")String iv, @RequestParam(required = true,value = "sessionId")String sessionId){ //从缓存中获取session_key Object wxSessionObj = redisUtil.get(sessionId); if(null == wxSessionObj){ return rtnParam(40008, null); } String wxSessionStr = (String)wxSessionObj; String sessionKey = wxSessionStr.split("#")[0]; try { AES aes = new AES(); byte[] resultByte = aes.decrypt(Base64.decodeBase64(encryptedData), Base64.decodeBase64(sessionKey), Base64.decodeBase64(iv)); if(null != resultByte && resultByte.length > 0){ String userInfo = new String(resultByte, "UTF-8"); return rtnParam(0, userInfo); } } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return rtnParam(50021, null); }
public byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) throws InvalidAlgorithmParameterException { initialize(); try { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); Key sKeySpec = new SecretKeySpec(keyByte, "AES"); cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));// 初始化 byte[] result = cipher.doFinal(content); return result; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (NoSuchProviderException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
ミニ プログラムは WeChat Open Platform プラットフォーム接続にバインドされています
safeopenid; openid は appid 内でのみ使用可能です。 appid も漏洩していない限り。
その後、復号化されたデータから appid を取得できます。WeChat ミニ プログラム チームの目的は何ですか?前に述べたように、openid と appid は、ミニ プログラム開発者が異なるミニ プログラム アプリケーション間でユーザーを区別して分離するのを容易にするために一緒に使用され、同時に WeChat ユーザー システムと 3 つ目のユーザー システムを組み合わせることができます。 -パーティービジネスシステム。 したがって、機密データの復号化の主な用途は、それを復号化してクライアントに送り返すことではなく、WeChat のユーザー情報をサーバー側で独自のビジネスに統合することだと思います。 【関連推奨事項】1.WeChatパブリックアカウントプラットフォームのソースコードダウンロード
2. 3.WeChat Lala Takeaway 2.2.4の復号化されたオープンソースバージョンWeChatルービックキューブのソースコード
以上がWeChat開発入門 (6) ユーザーデータの復号化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Python でデータを暗号化および復号化する方法、具体的なコード例が必要です データの暗号化と復号化は、情報セキュリティの分野において非常に重要な概念です。実際のアプリケーションでは、多くの場合、不正アクセスや情報漏洩を防ぐために機密データを暗号化する必要があります。 Python は、データの暗号化と復号化の操作を実装するための豊富なライブラリと関数を提供する強力なプログラミング言語です。この記事では、一般的に使用される暗号化アルゴリズムと、Python でデータの暗号化と復号化を実装するための具体的なコード例を紹介します。 1.MD5

Java 開発: データの暗号化と復号化を実装する方法、特定のコード例が必要です はじめに: 現代の情報時代の文脈において、データ セキュリティはますます重要になっています。開発者にとって、ユーザー データのセキュリティを保護する方法は必須のスキルです。データの暗号化と復号化は、データ セキュリティの重要な手段の 1 つです。この記事では、Java 言語を使用してデータの暗号化と復号化を実装する方法と、具体的なコード例を紹介します。 1. データ暗号化アルゴリズムの紹介 データ暗号化とは、元のデータを特定のアルゴリズムで処理し、暗号化を行わずに処理できるようにすることを指します。

PHP は、Web 開発およびサーバーサイド プログラミング、特に WeChat 開発で広く使用されているオープン ソースのスクリプト言語です。現在、ますます多くの企業や開発者が WeChat 開発に PHP を使用し始めています。これは、PHP が本当に学びやすく、使いやすい開発言語となっているためです。 WeChat の開発では、メッセージの暗号化と復号化はデータのセキュリティに関わるため、非常に重要な問題となります。暗号化と復号化の方法を持たないメッセージの場合、ハッカーは簡単にデータを入手でき、ユーザーに脅威を与える可能性があります。

Laravel を使用してデータの暗号化および復号化機能を実装する方法の概要: 最新のインターネット アプリケーションでは、ユーザー データのセキュリティを保護することが非常に重要です。重要なセキュリティ対策の 1 つは、機密データの暗号化された保管です。 Laravel は、人気のある PHP フレームワークとして、さまざまな暗号化および復号化機能のサポートを提供します。この記事では、Laravelの暗号化ライブラリを使用してデータを暗号化および復号化する方法を紹介します。ステップ 1: Laravel をインストールする まず、Larav がローカルまたはサーバーにインストールされていることを確認します。

PHP 配列を使用したデータの暗号化と復号化の方法とテクニック 概要: データの暗号化は、情報セキュリティにおいて重要な役割を果たします。この記事では、機密情報のセキュリティを保護するために、PHP 配列を使用してデータの暗号化と復号化を実装する方法とテクニックを紹介します。はじめに 現代社会において、ネットワークセキュリティの問題はますます注目を集めています。機密情報のセキュリティを保護するには、データ暗号化が一般的な方法です。 PHP 配列は、データの保存と操作に使用できる強力で柔軟なデータ構造です。機密データを PHP 配列に保存することによって

現代のインターネット分野では、データ セキュリティが常に重要なテーマとなっています。データを送信、保存、処理する際には、データのセキュリティを確保するためにさまざまな技術的手段を使用する必要がありますが、最も重要な技術的手段の 1 つはデータの暗号化です。 Gin は Go 言語をベースにした Web フレームワークで、そのシンプルさ、使いやすさ、効率性、安定性が多くの開発者に支持されています。この記事では、Gin フレームワークを使用してデータの暗号化と復号化機能を実装する方法を紹介しますので、一緒に学びましょう。まず、暗号化アルゴリズムの基本的な知識を理解する必要があります。

WeChat は現在、世界最大のユーザーベースを持つソーシャル プラットフォームの 1 つであり、モバイル インターネットの普及に伴い、ますます多くの企業が WeChat マーケティングの重要性を認識し始めています。 WeChat マーケティングを実施する場合、顧客サービスは重要な部分です。カスタマー サービスのチャット ウィンドウをより適切に管理するために、WeChat 開発に PHP 言語を使用できます。 1. PHP WeChat 開発の概要 PHP は、Web 開発の分野で広く使用されているオープン ソースのサーバー側スクリプト言語です。 WeChat パブリック プラットフォームが提供する開発インターフェイスと組み合わせると、PHP 言語を使用して WeChat を実行できます。

WeChat パブリック アカウントの開発において、ユーザー タグ管理は非常に重要な機能であり、開発者がユーザーをよりよく理解し、管理できるようになります。この記事では、PHPを使用してWeChatのユーザータグ管理機能を実装する方法を紹介します。 1. WeChat ユーザーの openid を取得する WeChat ユーザータグ管理機能を使用する前に、まずユーザーの openid を取得する必要があります。 WeChat パブリック アカウントの開発では、ユーザーの承認を通じて openid を取得するのが一般的です。ユーザー認証が完了したら、次のコードを通じてユーザーを取得できます。
