使用 gpg 加密文件 - 通过 shell 或 php

背景:客户提供私钥,并要求我方通过php把加密后的文件传输给他们。

环境

macOS Sierra 10.12.1

php 7.0.8

0、安装gpg环境

macOS

$ brew install gpg

CentOS

$ yum install gnupg

php

安装gnupg扩展,具体方法参考我的旧文:http://www.cnblogs.com/xjnotxj/p/6125305.html

1、导入私钥,公钥随之导入

$ gpg --import /Users/xjnotxj/downloads/6e.pri

2、测试密钥正确性[可跳过]

加密文件

$ 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

3、导出公钥

$ gpg -o pubkey.txt -a --export e6e6xxxx

e6e6xxxx => 上图的#2

4、使用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; }

参考官方api:http://www.php.net/manual/zh/ref.gnupg.php

使用 gpg 加密文件 - 通过 shell 或 php的更多相关文章

  1. 破解Zip加密文件常用的几种方法

    前言 在互联网的浪潮中,大家也许碰到过这种情况: 从网络上下载了一个zip文件,最后却发现它是用密码保护的,或者自己用密码加密了一个很重要zip文件,但是一段时间后忘记了密码,无法打开.这个时候,我们 ...

  2. gpg加密和解密

    linux:gpg加密和解密 1 创建密钥 2 查看私钥 3 导出公钥 4 导出私钥 5 导入秘钥 5.1 公钥 6 公钥加密 7 私钥解密 创建密钥 gpg --gen-key 你要求输入一下内容, ...

  3. web主题公园版权信息破解:script.js加密文件

    很多人会使用web主题公园网站的免费worldpress主题,但它的主题又都被加了版权信息,故意让人找不到版权信息的修改位置. 你如果去footer.php里面删除版权信息(技术支持:web主题公园) ...

  4. 破解ZIP加密文件密码fcrackzip

    破解ZIP加密文件密码fcrackzip ZIP是最常见的文件压缩方式.由于其压缩算法开源,主流操作系统都支持这种压缩算法.ZIP压缩方式支持密码加密.加密的时候会在文件头部保存密钥相关信息.利用这个 ...

  5. execl执行解释器文件以及shell命令

    问题描述:        execl执行解释器文件以及shell命令 问题解决: 具体源文件:

  6. 无需软件windows如何加密文件夹

    在百部百科上看到,放在博客中以便查看. 1.首先打开记事本,当然如果你的电脑里装有类似notepad++的文本编辑软件的也可以,但是不能用word.用这类软件好处是代码高亮,看上去舒服,减少错误率. ...

  7. 加密文件之Java改进版

    对应Python版:加密文件之Python版Java版比Python版要快得多,两个版本不在一个量级上.在加密解密1G大文件时,Java版花费的时间是秒级,而Python版花费的时间是10分钟级. i ...

  8. vim加密文件

    一.加密文件内容 vim gt-1.sh 输入:X 注意是大写的X 输入密码 然后,保存 再次访问,需要输入密码 如果输入密码错误,内容显示为乱码 用cat或more查看文件内容,显示为乱码:用vi重 ...

  9. 编写高质量代码改善C#程序的157个建议——建议116:避免用非对称算法加密文件

    建议116:避免用非对称算法加密文件 MD5值或者说HASH值是一种不可逆的算法.如果需要从密文还原成明文,那么就需要对称和非对称这两类可逆算法了. 对称算法示意图: 在对称算法中,首先需要发送方和接 ...

随机推荐

  1. python 使用__neg__和__iter__

    __neg__ python中 __neg__ 方法对应于 符号 - 可见 str 没有__neg__,定义 strnew 好吧,无法再简化了 __iter__ 看看 list 的 __iter__: ...

  2. CI框架,源代码一次性判断获取post(get)数据是否有某个字段值为空方法

    一.以下是CI框架 1.把所有的要接收的字段放在数组中 例: 我要接收:id,name,age,mobile 等字段 $req = array('id','name','age','mobile'); ...

  3. 解读ASP.NET 5 & MVC6系列(3):项目发布与部署

    本章我们将讲解ASP.NET5项目发布部署相关的内容,示例项目以我们前一章创建的BookStore项目为例. 发布前的设置 由于新版ASP.NET5支持多版本DNX运行环境的发布和部署,所以在部署之前 ...

  4. 探索c#之函数创建和闭包

    阅读目录: 动态创建函数 匿名函数不足之处 理解c#中的闭包 闭包的优点 动态创建函数 大多数同学,都或多或少的使用过.回顾下c#中动态创建函数的进化: C# 1.0中: public delegat ...

  5. 让你的站点也支持MarkDown

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式.Markdown的语法简洁明了.学习容易,而且功能比纯文本更强,因此有很多人 ...

  6. 使用shell/python获取hostname/fqdn释疑

    一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...

  7. Android RatingBar 自定义样式

    Android RatingBar 自定义样式 1.先定义Style: <style name="RadingStyle" parent="@android:sty ...

  8. HTML5 音频播放器-Javascript代码(短小精悍)

    直接上干货咯! //HTML5 音频播放器 lzpong 2015/01/19 var wavPlayer = function () { if(window.parent.wavPlayer) re ...

  9. 有关binlog的那点事(三)(mysql5.7.13)

    这次我们要探索更精细的binlog内容,上次讨论的Query_event和Rows_event肯定有让你疑惑不解的问题.Query_event中的status-vars环境变量有哪些,Rows_eve ...

  10. .net 网络编程

    1.首先说下计算机网络中的TCP/IP参考模型 TCP/IP把网络分为5层,每一层负责完成不同的功能 1)应用层:传输报文,提供各种网络应用,有FTP.SMTP.HTTP等协议 2)运输层:传输报文段 ...