前段時間研究了微信小微商戶,地址:https://pay.weixin.qq.com/wiki/doc/api/xiaowei.php?chapter=19_11php
其接口操做中須要下載證書針對返回的密文用 AEAD_AES_256_GCM 算法解密git
其中用到了 string sodium_crypto_aead_aes256gcm_decrypt ( string $ciphertext , string $ad , string $nonce , string $key ) 這個函數github
可是這個函數可能調用的時候會報錯,那是由於使用這個函數須要開啓 libsodium 擴展才能使用算法
官方文檔上面對該擴展的說明以下:windows
As of PHP 7.2.0 this extension is bundled with PHP. For older PHP versions this extension is available via PECL.api
從php 7.2.0開始,這個擴展與php捆綁在一塊兒。對於舊的PHP版本,此擴展可經過pecl得到。微信
windows 安裝方法函數
(PHP ≥ 7.2) 直接去 php.ini 開啓擴展就行 ,extension=php_sodium.dll 。由於 PHP7.2 版本後 PHP core 中就整合加密庫 Libsodium
(PHP < 7.2.0) 須要安裝,libsodium PECL 地址 http://pecl.php.net/package/libsodium而後下載 DLL 文件測試
下載完成後解壓,而後this
對於PHP 7如下版本windows上我測試了php 5.6,1.0.6 version 能安裝可是不能使用 sodium_crypto_aead_aes256gcm_decrypt 函數。
由於5.6上支持的版本爲1.0.6,而只有大於1.0.8的版本才支持此函數。
Sodium Compat PHP 類庫,網上說舊的PHP上可使用這個類庫實現。
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
實際證實沒法實現,由於低於7.1版本的php_openssl,不支持AEAD_AES_256_GCM算法的加密和解密。
因此只能使用7.1以上的PHP版原本解決了。
外文鏈接:https://paragonie.com/book/pecl-libsodium/read/00-intro.md#installing-libsodium
做者:舊舊的 <393210556@qq.com> 解決問題的方式,就是解決它一次