微信退款通知,退款回調數據解密.SHA256簽名AEAD_AES_256_GCM解密

$xmlResult = file_get_contents("php://input");//獲取微信的數據
$result = $this->xmlToArray($xmlResult);//將xml轉成數組
// 將加密的數據解密,方法在下面
$reqInfo = $this->refund_decrypt($result['req_info']);
 
/** 退款通知解密* @Author WangZhaoBo* @param $str 微信同步的加密串req_info* @param $key 商戶key*/
public function refund_decrypt($str) {$key = md5($this->appSecret);$str = base64_decode($str);$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB);$block = mcrypt_get_block_size('rijndael_128', 'ecb');$pad = ord($str[($len = strlen($str)) - 1]);$len = strlen($str);$pad = ord($str[$len - 1]);return substr($str, 0, strlen($str) - $pad);
}

?//SHA256簽名

/***     作用:生成256簽名*/public function get256Sign($Obj,$key = null){foreach ($Obj as $k => $v){$Parameters[$k] = $v;}//簽名步驟一:按字典序排序參數
        ksort($Parameters);$String = $this->formatBizQueryParaMap($Parameters, false);//echo '【string1refund_decrypt】'.$String.'</br>';//簽名步驟二:在string后加入KEYif(is_null($key)){$key =  WxPayConf_pub::$KEY;$String = $String."&key=".WxPayConf_pub::$KEY;}else{$String = $String."&key=".$key;}echo $String;//簽名步驟三:MD5加密//$String = md5($String);$String = hash_hmac("sha256", $str, $key);//echo "【string3】 ".$String."</br>";//簽名步驟四:所有字符轉為大寫$result_ = strtoupper($String);//echo "【result】 ".$result_."</br>";return $result_;}

?AEAD_AES_256_GCM的解密php示例代碼 (參考:https://pay.weixin.qq.com/wiki/doc/api/xiaowei.php?chapter=19_11和https://blog.csdn.net/u010324331/article/details/82153067和https://pay.weixin.qq.com/wiki/doc/api/download/wxpay_xiaowei_cert.pdf和)

//region 證書解密start public function decodePem(){$ciphertext = '加密后的證書內容';$nonce = '加密證書的隨機串,加密證書的隨機串';$associated_data = '加密證書的隨機串,固定值: certificate';$key = '你的APIv3密鑰';$check_sodium_mod = extension_loaded('sodium');if($check_sodium_mod === false){echo '沒有安裝sodium模塊';die;}$check_aes256gcm = sodium_crypto_aead_aes256gcm_is_available();if($check_aes256gcm === false){echo '當前不支持aes256gcm';die;}$pem = sodium_crypto_aead_aes256gcm_decrypt(base64_decode($ciphertext),$associated_data,$nonce,$key);var_dump($pem); //這是解密出來的證書內容,復制出來保存就行了 
    }//endregion 證書解密end 

?使用sodium_crypto_aead_aes256gcm_decrypt函數需要安裝sodium擴展,要求PHP版本必須大于7,小于7的也有這個擴展, 但是沒有sodium_crypto_aead_aes256gcm_decrypt這個方法.

安裝sodium擴展方法看這里https://blog.csdn.net/u010324331/article/details/82153067

如果不安裝擴展,怎么辦? 用paragonie/sodium_compat這個類庫.?

Sodium Compat 是用于 Sodium 加密庫(libsodium)的純 PHP 填充,它是 PHP 7.2.0+ 的核心擴展,也可用于 PECL。
這個庫 tentativeley 支持PHP 5.2.4 - 7.x(最新版),但官方只支持非 EOL 版本的 PHP。
如果安裝了 PHP 擴展,Sodium Compat 將機會性地透明地使用 PHP 擴展而不是我們的實現。
github 地址: https://github.com/paragonie/sodium_compat

其中ParagonIE_Sodium_Compat類下面有一個crypto_aead_aes256gcm_decrypt方法.

調用方法

ParagonIE_Sodium_Compat::crypto_aead_aes256gcm_decrypt($ciphertext,$associated_data,$nonce,$key);

?

轉載于:https://www.cnblogs.com/wangzhaobo/p/11040736.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393176.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393176.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393176.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BeanShell自動裝箱拆箱

“裝箱”和“拆箱”是用來描述自動包裝一個原始類型到一個包裝類以及在必要時解開包裝回到原始類型的術語。裝箱是 Java 的特性&#xff08;SDK 1.5&#xff09;之一&#xff0c;且 BeanShell 已支持多年。 BeanShell 支持原始類型的裝箱和拆箱。比如&#xff1a; int i5; Inte…

leetcode816. 模糊坐標

我們有一些二維坐標&#xff0c;如 “(1, 3)” 或 “(2, 0.5)”&#xff0c;然后我們移除所有逗號&#xff0c;小數點和空格&#xff0c;得到一個字符串S。返回所有可能的原始字符串到一個列表中。 原始的坐標表示法不會存在多余的零&#xff0c;所以不會出現類似于"00&q…

IO流入門-第十二章-ObjectInputStream_ObjectOutputStream

DataInputStream和DataOutputStream基本用法和方法示例&#xff0c;序列化和反序列化 import java.io.Serializable; //該接口是一個“可序列化”的 &#xff0c;沒有任何方法&#xff0c;是一個標識接口&#xff0c;還有Cloneable /*標識接口的作用&#xff1a;標識作用…

matlab pca重構,Matlab – PCA分析和重建多維數據

這是一個快速的演練.首先我們創建一個隱藏變量的矩陣.它有100個觀察,有兩個特點.>> Y randn(100,2);現在創建一個加載矩陣.這將把隱藏的變量映射到觀察到的變量上.說你觀察到的變量有四個特征.那么你的加載矩陣需要是24>> W [1 1; 1 -1; 2 1; 2 -1];這告訴你,觀察…

文檔對象模型dom_什么是文檔對象模型,以及為什么應該知道如何使用它。

文檔對象模型domby Leonardo Maldonado萊昂納多馬爾多納多(Leonardo Maldonado) 什么是文檔對象模型&#xff0c;以及為什么應該知道如何使用它。 (What’s the Document Object Model, and why you should know how to use it.) So, you’ve studied HTML, you’ve created y…

安裝Docker step by step

1. 系統要求 centos7以上 使用cat /etc/redhat-release查看系統版本&#xff0c;我的Centos 7.6 centos-extra 倉庫 enable&#xff0c;默認是打開的 2.安裝docker docer安裝分為聯網安裝和離線安裝兩種安裝 方式&#xff0c; 第一種 在有外網環境下安裝docker,一般使用yum安…

linux用戶空間和內核exit的語義--linux沒有線程

如果你在程序中調用了exit&#xff0c;那么很顯然你的程序會退出&#xff0c;可是至于為何會退出那就是庫的事情了&#xff0c;我為什么說只是庫的事情而不關linux內核的事情呢&#xff1f;那是因為linux內核根本不管用戶空間的行為策略。庫的策略是什么&#xff1f;很簡單的退…

leetcode1328. 破壞回文串

給你一個回文字符串 palindrome &#xff0c;請你將其中 一個 字符用任意小寫英文字母替換&#xff0c;使得結果字符串的字典序最小&#xff0c;且 不是 回文串。 請你返回結果字符串。如果無法做到&#xff0c;則返回一個空串。 示例 1&#xff1a; 輸入&#xff1a;palindro…

php補充 擴展,PHP安裝擴展補充說明

上一篇文章中用到了&#xff0c;php的sodium擴展&#xff0c;那么如何安裝PHP擴展呢&#xff1f;基于我之前踩過的一些坑&#xff0c;大致整理了幾種安裝php擴展的方法。已安裝sodium為例1、先做點準備工作&#xff0c;安裝sodium依賴rpm -ivh http://mirrors.whsir.com/centos…

Java調用存儲過程出現Bug,sql語法錯誤

因為SQL Server運行沒有正常,檢查了傳入參數的值,發現問題,然后傳入默認參數,解決了問題.轉載于:https://www.cnblogs.com/JimmySeraph/p/11043490.html

leetcode1438. 絕對差不超過限制的最長連續子數組

給你一個整數數組 nums &#xff0c;和一個表示限制的整數 limit&#xff0c;請你返回最長連續子數組的長度&#xff0c;該子數組中的任意兩個元素之間的絕對差必須小于或者等于 limit 。 如果不存在滿足條件的子數組&#xff0c;則返回 0 。 示例 1&#xff1a; 輸入&#…

gitlab 2.7版本升級到2.8

第一步 關閉服務 /etc/init.d/gitlab stop第二部 更新代碼cd /home/gitlab/gitlab# Get latest codesudo -u gitlab git pull origin stable# Install libssudo -u gitlab bundle install --without development test# update dbsudo -u gitlab bundle exec rake db:migrate RA…

arkit技術介紹_面向移動AR的觸覺技術:如何以“觸摸”感增強ARKit應用

arkit技術介紹by Neil Mathew通過尼爾馬修(Neil Mathew) 面向移動AR的觸覺技術&#xff1a;如何以“觸摸”感增強ARKit應用 (Haptics for mobile AR: how to enhance ARKit apps with a sense of “touch”) I’m really excited about the future of haptics for AR and VR. …

Unity3D的坑系列:動態加載dll

Unity3D的坑系列&#xff1a;動態加載dll 我現在參與的項目是做MMO手游&#xff0c;目標平臺是Android和iOS&#xff0c;iOS平臺不能動態加載dll&#xff08;什么原因找喬布斯去&#xff09;&#xff0c;可以直接忽略&#xff0c;而在Android平臺是可以動態加載dll的&#xff0…

微信小程序 php配置,微信小程序的配置

我們使用app.json文件來對微信小程序進行全局配置&#xff0c;決定頁面文件的路徑、窗口表現、設置網絡超時時間、設置多 tab 等。以下是一個包含了所有配置選項的簡單配置app.json{"pages": ["pages/index/index","pages/logs/index"],"wi…

leetcode332. 重新安排行程(dfs)

給定一個機票的字符串二維數組 [from, to]&#xff0c;子數組中的兩個成員分別表示飛機出發和降落的機場地點&#xff0c;對該行程進行重新規劃排序。所有這些機票都屬于一個從 JFK&#xff08;肯尼迪國際機場&#xff09;出發的先生&#xff0c;所以該行程必須從 JFK 開始。 …

PWA - service worker - Workbox(未完)

Get Started&#xff08;開始&#xff09; 只有get請求才能cache緩存嗎&#xff1f;Create and Register a Service Worker File&#xff08;創建和注冊 Service Worker&#xff09; Before we can use Workbox, we need to create a service worker file and register it to o…

draft.js_如何使用快捷方式在Draft.js中創建有序列表和無序列表

draft.jsby Andrey Semin通過安德烈塞米(Andrey Semin) 如何使用快捷方式在Draft.js中創建有序列表和無序列表 (How to create ordered and unordered lists in Draft.js with a shortcut) We at Propeller have encountered many differences between Draft.js and popular t…

當javaScript從入門到提高前需要注意的細節:變量部分

到了HTML5的時代&#xff0c;對javaScript的要求不是降低了&#xff0c;而是更提高了。javaScript語言的入門非常簡單&#xff0c;如果你有java、C#等C風格的結構化語言的基礎&#xff0c;那javaScript你最多半天就可以寫點什么了。但是javaScript是一種動態語言&#xff0c;這…

PAT乙級 1003. 我要通過!

題目&#xff1a; “答案正確”是自動判題系統給出的最令人歡喜的回復。本題屬于PAT的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件&#xff0c;系統就輸出“答案正確”&#xff0c;否則輸出“答案錯誤”。 得到“答案正確”的條件是&#xff1a; 1. 字符串中必須僅有…