gpg加密使用

Posted mosakashaka

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gpg加密使用相关的知识,希望对你有一定的参考价值。

GPG一般是两方用来加密发送信息的。

使用对方的公钥进行加密,可以确保只有对方才能用他的私钥解密。
使用自己的私钥对消息签名,可以确保对方用自己的公钥验证消息的确源自自己。

生成gpg秘钥对

gpg --generate-key

之后会询问用户名、邮箱以及密码,最后会需要大量的随机数(这里我等了十分钟以上才好)

导出公钥和私钥

私钥导出

一般私钥导出是为了在其他机器上解密文件

# 获取私钥id
gpg --list-secret-keys

# 导出私钥到文件
gpg --export-secret-keys $ID > my-private-key.asc

# 在另一台机器上导入
gpg --import my-private-key.asc

# 如果另一台机器上已经存在,则可以先删除
gpg --delete-keys 
gpg --delete-secret-keys

公钥导出

# 查看有哪些公钥可导出
gpg --list-keys

# 导出指定公钥
gpg --output blake.gpg --armor --export alice@cyb.org

# 导入
gpg --import blake.gpg

# 确认key有效
gpg --edit-key alice@cyb.org
>fpr
># 注意这里trust要选择5,后面签名才能不用再确认
>trust
>check

使用

加密

gpg --encrypt --armor --recipient recipient_email $file

解密

gpg --decrypt --output {outputfile} message-for-me.gpg

缓存

通常情况下,使用gpg 解密后,gpg agent会缓存输入的密码一段时间。
如果需要强制不进行缓存,每次都提示输入密码

创建~/.gnupg/gpg-agent.conf 文件,并增加以下内容:

default-cache-ttl 1
max-cache-ttl 1

然后重启gpg agent:

echo RELOADAGENT | gpg-connect-agent

通过命令行提供密码

如果想在脚本中进行解密,一般是不希望弹出密码框,而是直接通过命令提供。
命令如下:

gpg --pinentry-mode loopback --batch --yes --passphrase "${passphrase}" --output ${output_file_name} --decrypt ${file_to_decrypt}

这里关键有两点:

  1. 必须增加--batch选项,否则--passphrase选项无效,这是在man手册里有说的
  2. 必须增加--pinentry-mode loopback选项,否则仍然提示密码框,这个手册中没说,搜索了很久才知道如何解决(这个回答

以上是关于gpg加密使用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用gpg工具实现公钥加密(对称加密和非对称加密)?

安全与加密之gpg,ssh服务

gpg加密使用

使用 GPG 对数据进行加密解密签名

Linux实用工具之GPG

安全和加密——openssl及自建CA