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();
}
复制代码
相关文章
相关标签/搜索