GnuPG 是 RFC4880 OpenPGP 標準 PGP 的完整實現,自由軟件。GnuPG 能夠加密和簽名數據和信息傳遞,包含一個通用的密鑰管理系統,包含的訪問模塊能夠訪問各類公鑰目錄。 GnuPG, 簡稱 GPG, 是命令行工具,很方便和其它程序進行整合,具備不少前端程序和函數庫。 GnuPG V2 還支持 S/MIME 和 Secure Shell (ssh). 更多詳細介紹點擊這裏php
目前該擴展沒有找到windows版本,是在linux系統centos7安裝測試的前端
wget https://pecl.php.net/get/gnupg-1.4.0.tgz
複製代碼
tar xvf gnupg-1.4.0.tgz
複製代碼
cd gnupg-1.4.0
複製代碼
/www/server/php/72/bin/phpize //用本身的phpize路徑
複製代碼
./configure --with-php-config=/www/server/php/72/bin/php-config //用本身的php-config路徑
複製代碼
make && make install
複製代碼
echo "extension = gnupg.so" >> /www/server/php/72/etc/php.ini //用本身的php.ini路徑
複製代碼
如出現這種錯誤咱們須要安裝下gpgme,直接執行命令若是checkconfig時報錯please reinstall the gpgme distribution(請從新安裝gpgme發行版),以下圖 linux
yum install gpgme-devel
安裝便可!
驗證擴展是否安裝成功:在頁面打印出phpinfo,搜索gnupg,搜到說明安裝成功! windows
網上有不少教程能夠參考這裏,這裏主要說下碰見的問題:centos
yum -y install rng-tools
rngd -r /dev/urandom
複製代碼
//加密
$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
$pubinfo = $gpg->import(file_get_contents('public-key.txt'));//導入公鑰
$text =
"Dear All,\n The answer is 42.\n Wangff";
try {
$gpg->addencryptkey($pubinfo['fingerprint'], '');
$encrytext = $gpg->encrypt($text);
echo $encrytext;
file_put_contents('test.gpg', $encrytext);
} catch (Exception $e) {
die('ERROR: ' . $e->getMessage());
}
複製代碼
//解密
$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
$priinfo = $gpg->import(file_get_contents('private-key.txt'));//導入私鑰
$text = file_get_contents('test.gpg');
try {
$gpg->adddecryptkey($pubinfo['fingerprint'], '');
$decrytext = $gpg->decrypt($text);
echo $decrytext;
} catch (Exception $e) {
echo 'ERROR: ' . $e->getMessage();
}
複製代碼