項目中使用libsodium擴展


前段時間研究了微信小微商戶,地址:https://pay.weixin.qq.com/wiki/doc/api/xiaowei.php?chapter=19_11

其接口操作中需要下載證書針對返回的密文用 AEAD_AES_256_GCM 算法解密

其中用到了 string sodium_crypto_aead_aes256gcm_decrypt ( string $ciphertext , string $ad , string $nonce , string $key ) 這個函數

但是這個函數可能調用的時候會報錯,那是因為使用這個函數需要開啟 libsodium 擴展才能使用

官方文檔上面對該擴展的說明如下:

As of PHP 7.2.0 this extension is bundled with PHP. For older PHP versions this extension is available via PECL.

從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 文件

下載完成后解壓,然后

  • 把 php_sodium.dll 文件放到你的php安裝目錄下的ext目錄下(我這運行的是phpStudy安裝的php環境)
  • libsodium.dll 文件直接放到PHP安裝的根目錄
  • 配置下php.ini,開啟使用擴展extension=php_sodium.dll
  • 最后重啟下php,
  • 查看phpinfo,大功告成

對於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> 解決問題的方式,就是解決它一次


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM