CentOS 安装libsodium 支持 crypto_aead_aes256gcm_decrypt 兼容php5.6,php7.2
微信小微商户下载证书返回的密文用 AEAD_AES_256_GCM
算法 解密的方法。其中用到了 string sodium_crypto_aead_aes256gcm_decrypt ( string $ciphertext , string $ad , string $nonce , string $key )
这个函数。但是这个函数可能你们调用的时候会报错,那是因为使用这个函数需要开启 libsodium 扩展才能使用。
(PHP ≥ 7.2) 直接去 php.ini 开启扩展就行 ,extension=php_sodium.dll
。因为 PHP7.2 版本后 PHP core 中就整合加密库 Libsodium
(PHP < 7.2.0) 需要安装,libsodium
CentOS:安装libsodium
参考:https://zhuanlan.zhihu.com/p/84899708
在http://pecl.php.net/package/libsodium和https://github.com/jedisct1/libsodium-php看了下,
只合适用1.*的版本
wget http://pecl.php.net/get/libsodium-1.0.7.tgz pecl install libsodium-1.0.7.tgz
安装好之后提示:
Build process completed successfully Installing '/usr/local/php5/lib/php/extensions/no-debug-non-zts-20131226/libsodium.so' install ok: channel://pecl.php.net/libsodium-1.0.7 configuration option "php_ini" is not set to php.ini location You should add "extension=libsodium.so" to php.ini
vi /usr/local/php/etc/php.ini
添加上
extension=libsodium.so
即可
测试代码
<?php $str='17pV1s3a8bIHpOJrIOtTAuRSEToHhFDU1KFARw=='; $ad = 'fullstackpm'; // 加密证书的随机串 $nonce = '4k3HqbrXwtpg'; $kengen = 'D2Ffwerq2c3242aa2F3RF52B315dff11'; // 解密 $pem=base64_decode($str); if(version_compare(PHP_VERSION,'7.2.0','<')){ $v = \Sodium\crypto_aead_aes256gcm_decrypt($pem, $ad, $nonce, $kengen); }else{ $v = sodium_crypto_aead_aes256gcm_decrypt($pem, $ad, $nonce, $kengen); } var_dump($v); ?>