背景:客戶提供私鑰,並要求我方經過php把加密後的文件傳輸給他們。
環境
macOS Sierra 10.12.1
php 7.0.8
安裝gpg環境
macOS:
$ brew install gpg
CentOS
$ yum install gnupg
php
安裝gnupg擴展,具體方法參考個人舊文:
使用phpize安裝php擴展
導入私鑰,公鑰隨之導入
$ gpg --import /Users/xjnotxj/downloads/6e.pri

測試密鑰正確性[可跳過]
加密文件
$ gpg --recipient 0D39xxxx --output test_file.xls.gpg --encrypt test_file.xls
0D39xxxx => 上圖的
#1
解密文件
$ gpg -o test_file_new.xls -d test_file.xls.gpg
導出公鑰
$ gpg -o pubkey.txt -a --export e6e6xxxx
e6e6xxxx => 上圖的
#2
使用php加密文件
// 設置gnupg在你本機的路徑
putenv('GNUPGHOME=/root/.gnupg');
try {
//獲取公鑰
$publicKey = file_get_contents('application/report/pubkey.txt');
//初始化gpg
$gpg = new gnupg();
//開啓調試
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
//導入公鑰
$info = $gpg->import($publicKey);
//獲取公鑰指紋
$gpg->addencryptkey($info['fingerprint']);
//獲取須要加密的文件
$uploadFileContent = file_get_contents($filename);
//加密文件
$enc = $gpg->encrypt($uploadFileContent);
//保存文件到本地
$filename = 'application/report/'.'file_xls' . '.gpg';
file_put_contents($filename, $enc);
} catch (Exception $e) {
//log something
return $e->getMessage();
}
參考