グループ內(nèi)の何人かの友人がミニ プログラム ユーザー データの復(fù)號(hào)化プロセスについて質(zhì)問(wèn)しているのをよく見(jiàn)かけます。そのため、ミニ プログラム ユーザーの機(jī)密データの復(fù)號(hào)化に関するチュートリアルを書(shū)く予定です。
暗號(hào)化プロセスは WeChat サーバー上で完了し、復(fù)號(hào)化プロセスはミニプログラムと獨(dú)自のサーバー上で完了します。つまり、次のデータがencryptDataから取得されます:
{ "openId": "OPENID", "nickName": "NICKNAME", "gender": GENDER, "city": "CITY", "province": "PROVINCE", "country": "COUNTRY", "avatarUrl": "AVATARURL", "unionId": "UNIONID", "watermark": { "appid":"APPID", "timestamp":TIMESTAMP } }
準(zhǔn)備知識(shí):
上記の3點(diǎn)は、復(fù)號(hào)プロセスを理解するために非常に重要です。
公式ドキュメントに従って、一般的な復(fù)號(hào)プロセスを次のように整理しました:
アプレットクライアントは wx.login を呼び出し、コールバックには js_code が含まれます。
次に、js_code をサーバー A (開(kāi)発者サーバー) に送信します。サーバー A は、ユーザーの openid と session_key (セッション キー) と引き換えに、js_code、appId、secretkey、およびgrant_type パラメーターを使用して WeChat サーバーへのリクエストを開(kāi)始します。
サーバー A が session_key を取得した後、3rdSessionId をキーとして、session_key + openid を値として使用して 3rd_session と呼ばれる亂數(shù)を生成しますredis または memcached にキャッシュ します。直接推奨 session_key はネットワーク経由で送信され、開(kāi)発者は session_key に関連付ける一意のキーを生成します。その機(jī)能は次のとおりです:
- 3rdSessionId をクライアントに返し、ミニ プログラムのログイン ステータスを維持します。
- 3rdSessionId を通じてユーザー session_key と openid を検索します。
- クライアントが 3rdSessionId を取得すると、それはストレージにキャッシュされます。
- ユーザーの機(jī)密データの encryptedData は、wx.getUserIinfo を通じて取得できます。
- クライアントは、encryptedData、3rdSessionId、オフセットを一緒にサーバーAに送信します
- サーバーAは、3rdSessionIdに基づいてキャッシュからsession_keyを取得します
- AESを使用してサーバーAのencryptedDataを復(fù)號(hào)化し、ユーザーの機(jī)密データ
AES 復(fù)號(hào)化の 3 つのパラメーター:
- ciphertext encryptedData
- key aesKey
- offset Vector iv
- ciphertextオフセット ベクトルはクライアントによって提供されます。 クライアントそれをサーバーに送信し、サーバー上の 2 つのパラメーターは Base64_decode
デコード です。
- 3rdSessionId に基づいてキャッシュから session_key を取得し、session_key を Base64_decode して aesKey、aes キーを取得します。
- aes復(fù)號(hào)化メソッドを呼び出します。アルゴリズムは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) { //獲取用戶敏感數(shù)據(jù)密文和偏移向量 that.setData({encryptedData: res.encryptedData}) that.setData({iv: res.iv}) } })}})2. コードを使用して 3rdSessionId を交換します
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) });3.
//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){ //解密后的數(shù)據(jù) console.log(result.data) }, function(result){ console.log(result) });4. サーバー側(cè)の復(fù)號(hào)化実裝 (java)
/** * 解密用戶敏感數(shù)據(jù) * @param encryptedData 明文 * @param iv 加密算法的初始向量 * @param sessionId 會(huì)話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); }5. AES 復(fù)號(hào)化コア コード
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 內(nèi)でのみ使用可能です。 appid も漏洩していない限り。
その後、復(fù)號(hào)化されたデータから appid を取得できます。WeChat ミニ プログラム チームの目的は何ですか?前に述べたように、openid と appid は、ミニ プログラム開(kāi)発者が異なるミニ プログラム アプリケーション間でユーザーを區(qū)別して分離するのを容易にするために一緒に使用され、同時(shí)に WeChat ユーザー システムと 3 つ目のユーザー システムを組み合わせることができます。 -パーティービジネスシステム。 したがって、機(jī)密データの復(fù)號(hào)化の主な用途は、それを復(fù)號(hào)化してクライアントに送り返すことではなく、WeChat のユーザー情報(bào)をサーバー側(cè)で獨(dú)自のビジネスに統(tǒng)合することだと思います。 【関連推奨事項(xiàng)】1.WeChatパブリックアカウントプラットフォームのソースコードダウンロード
2. 3.WeChat Lala Takeaway 2.2.4の復(fù)號(hào)化されたオープンソースバージョンWeChatルービックキューブのソースコード
以上がWeChat開(kāi)発入門 (6) ユーザーデータの復(fù)號(hào)化の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

ホットAIツール

Undress AI Tool
脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress
リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover
寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

人気の記事

ホットツール

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

SublimeText3 中國(guó)語(yǔ)版
中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開(kāi)発ツール

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

Java 開(kāi)発: データの暗號(hào)化と復(fù)號(hào)化を?qū)g裝する方法、特定のコード例が必要です はじめに: 現(xiàn)代の情報(bào)時(shí)代の文脈において、データ セキュリティはますます重要になっています。開(kāi)発者にとって、ユーザー データのセキュリティを保護(hù)する方法は必須のスキルです。データの暗號(hào)化と復(fù)號(hào)化は、データ セキュリティの重要な手段の 1 つです。この記事では、Java 言語(yǔ)を使用してデータの暗號(hào)化と復(fù)號(hào)化を?qū)g裝する方法と、具體的なコード例を紹介します。 1. データ暗號(hào)化アルゴリズムの紹介 データ暗號(hào)化とは、元のデータを特定のアルゴリズムで処理し、暗號(hào)化を行わずに処理できるようにすることを指します。

Python でデータを暗號(hào)化および復(fù)號(hào)化する方法、具體的なコード例が必要です データの暗號(hào)化と復(fù)號(hào)化は、情報(bào)セキュリティの分野において非常に重要な概念です。実際のアプリケーションでは、多くの場(chǎng)合、不正アクセスや情報(bào)漏洩を防ぐために機(jī)密データを暗號(hào)化する必要があります。 Python は、データの暗號(hào)化と復(fù)號(hào)化の操作を?qū)g裝するための豊富なライブラリと関數(shù)を提供する強(qiáng)力なプログラミング言語(yǔ)です。この記事では、一般的に使用される暗號(hào)化アルゴリズムと、Python でデータの暗號(hào)化と復(fù)號(hào)化を?qū)g裝するための具體的なコード例を紹介します。 1.MD5

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

PHP は、Web 開(kāi)発およびサーバーサイド プログラミング、特に WeChat 開(kāi)発で広く使用されているオープン ソースのスクリプト言語(yǔ)です?,F(xiàn)在、ますます多くの企業(yè)や開(kāi)発者が WeChat 開(kāi)発に PHP を使用し始めています。これは、PHP が本當(dāng)に學(xué)びやすく、使いやすい開(kāi)発言語(yǔ)となっているためです。 WeChat の開(kāi)発では、メッセージの暗號(hào)化と復(fù)號(hào)化はデータのセキュリティに関わるため、非常に重要な問(wèn)題となります。暗號(hào)化と復(fù)號(hào)化の方法を持たないメッセージの場(chǎng)合、ハッカーは簡(jiǎn)単にデータを入手でき、ユーザーに脅威を與える可能性があります。

PHP 配列を使用したデータの暗號(hào)化と復(fù)號(hào)化の方法とテクニック 概要: データの暗號(hào)化は、情報(bào)セキュリティにおいて重要な役割を果たします。この記事では、機(jī)密情報(bào)のセキュリティを保護(hù)するために、PHP 配列を使用してデータの暗號(hào)化と復(fù)號(hào)化を?qū)g裝する方法とテクニックを紹介します。はじめに 現(xiàn)代社會(huì)において、ネットワークセキュリティの問(wèn)題はますます注目を集めています。機(jī)密情報(bào)のセキュリティを保護(hù)するには、データ暗號(hào)化が一般的な方法です。 PHP 配列は、データの保存と操作に使用できる強(qiáng)力で柔軟なデータ構(gòu)造です。機(jī)密データを PHP 配列に保存することによって

現(xiàn)代のインターネット分野では、データ セキュリティが常に重要なテーマとなっています。データを送信、保存、処理する際には、データのセキュリティを確保するためにさまざまな技術(shù)的手段を使用する必要がありますが、最も重要な技術(shù)的手段の 1 つはデータの暗號(hào)化です。 Gin は Go 言語(yǔ)をベースにした Web フレームワークで、そのシンプルさ、使いやすさ、効率性、安定性が多くの開(kāi)発者に支持されています。この記事では、Gin フレームワークを使用してデータの暗號(hào)化と復(fù)號(hào)化機(jī)能を?qū)g裝する方法を紹介しますので、一緒に學(xué)びましょう。まず、暗號(hào)化アルゴリズムの基本的な知識(shí)を理解する必要があります。

WeChat パブリック アカウントの開(kāi)発では、投票機(jī)能がよく使用されます。投票機(jī)能はユーザーが気軽に交流に參加できるほか、イベントの開(kāi)催や意見(jiàn)調(diào)査などにも重要なツールです。この記事では、PHPを使用してWeChatの投票機(jī)能を?qū)g裝する方法を紹介します。 WeChat公式アカウントの認(rèn)証を取得する まずはWeChat公式アカウントの認(rèn)証を取得する必要があります。 WeChatパブリックプラットフォームでは、WeChatパブリックアカウント、公式アカウント、およびパブリックアカウントに対応するトークンのAPIアドレスを設(shè)定する必要があります。 PHP言語(yǔ)を使用した開(kāi)発の過(guò)程では、WeChatが公式に提供するPHを使用する必要があります

WeChat の人気に伴い、マーケティング ツールとして WeChat を使用し始める企業(yè)が増えています。 WeChat グループ メッセージング機(jī)能は、企業(yè)が WeChat マーケティングを行うための重要な手段の 1 つです。ただし、手動(dòng)送信のみに頼ると、マーケターにとって非常に時(shí)間と労力がかかる作業(yè)になります。したがって、WeChat マス メッセージング ツールを開(kāi)発することが特に重要です。この記事では、PHP を使用して WeChat マス メッセージング ツールを開(kāi)発する方法を紹介します。 1. 準(zhǔn)備作業(yè) WeChat マス メッセージング ツールを開(kāi)発するには、次の技術(shù)點(diǎn)を習(xí)得する必要があります。 PHP WeChat パブリック プラットフォーム開(kāi)発の基礎(chǔ)知識(shí) 開(kāi)発ツール: Sub
