PHP GnuPG實現加密解密

GnuPG簡介

GnuPG 是 RFC4880 OpenPGP 標準 PGP 的完整實現,自由軟件。GnuPG 能夠加密和簽名數據和信息傳遞,包含一個通用的密鑰管理系統,包含的訪問模塊能夠訪問各類公鑰目錄。 GnuPG, 簡稱 GPG, 是命令行工具,很方便和其它程序進行整合,具備不少前端程序和函數庫。 GnuPG V2 還支持 S/MIME 和 Secure Shell (ssh). 更多詳細介紹點擊這裏php

安裝PHP GnuPG擴展

目前該擴展沒有找到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路徑
複製代碼

若是checkconfig時報錯please reinstall the gpgme distribution(請從新安裝gpgme發行版),以下圖 linux

如出現這種錯誤咱們須要安裝下gpgme,直接執行命令 yum install gpgme-devel安裝便可!

驗證擴展是否安裝成功:在頁面打印出phpinfo,搜索gnupg,搜到說明安裝成功! windows

建立GPG密鑰

網上有不少教程能夠參考這裏,這裏主要說下碰見的問題:centos

  • 生成密鑰最後一步不要設置保護密碼,由於高版本的gpg密碼沒法經過普通的程序傳輸,會致使解密失敗。
  • 生成密鑰過程當中若是卡住了,說明機器沒有生成足夠的隨機數,須要安裝rngd服務---熵值,命令以下
yum -y install  rng-tools
rngd -r /dev/urandom
複製代碼

PHP經過GPG加密解密

//加密
$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();
}
複製代碼
相關文章
相關標籤/搜索