欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GPG加密解密与实际应用

程序员文章站 2022-07-14 12:45:06
...

简介

GPG——GnuPG,是一种非对称**加密工具软件,主要用于加密解密,进行数字签名等。GPG可以生成用于加密解密、进行数字签名、数据指纹的非对称**。

安装

目前UBUNTU默认已经安装了GPG,编译安装可参考中文版Howto中的安装一节。注意国际版和美国版的区别。

生成**操作过程

生成**的命令是gpg –gen-key,下面是一个gpg –gen-key执行的过程,会夹杂说明文字,并跳过一部分不重要的提示信息,来说明**生成的过程:

gpg --gen-key
……
请选择您要使用的**种类:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (仅用于签名)
   (4) RSA (仅用于签名)
您的选择? 

可以选择不同的加密算法,以及用途。以前默认使用的是DSA算法,目前变成了RSA。这次选择默认。

RSA **长度应在 1024 位与 4096 位之间。
您想要用多大的**尺寸?(2048) 

**长度/尺寸越长,越不易**,但也需要更多的处理过程,因而可能处理的更慢。此处默认值是2048。此值已经与HOWTO中不太一样了,更长了,DSA**的长度范围也变成了1024-3072之间。这是个“泄露年龄的问题”。

请设定这把**的有效期限。
     0 = **永不过期
      <n>  = **在 n 天后过期
      <n>w = **在 n 周后过期
      <n>m = **在 n 月后过期
      <n>y = **在 n 年后过期
……

**有效期,不用解释。

您需要一个用户标识来辨识您的**;本软件会用真实姓名、注释和电子邮件地址组合
成用户标识,如下所示:
    “Heinrich Heine (Der Dichter) <[email protected]>”

真实姓名: xxx
电子邮件地址: [email protected]

这个标识会作为以后维护**的标志,如查询,导入导出,销毁等操作,将以此为UID进行检索确认对只个**进行操作。

您需要一个密码来保护您的私钥。

输入一个密码,这样在使用**时,会要求输入密码,正确后才能使用**,这是第二重保护。 可以不输入密码,以用于一些特殊用途,不过一般情况下,还是有它比较好,只是必须记好,别忘了。

我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。

随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵!
(还需要177字节)
....+++++

随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵!
(还需要155字节)
....................+++++

这时系统开始生成**,这期间需要有足够的操作以在内存中生成随机数。所以,去干点别的,直到**生成完毕,但不要离开喝茶。

gpg: ** 375B9788 被标记为绝对信任
公钥和私钥已经生成并经签名。
……
sub   4096R/107FE36C 2014-12-13

至此**生成完成。

对**的一些操作

查看**

$ gpg --list-keys
/home/pangyi/.gnupg/pubring.gpg
-------------------------------
pub   4096R/375B9788 2014-12-13
uid                  xxx (xxxxx) <[email protected]>
sub   4096R/107FE36C 2014-12-13

pub   3072D/9D4F5F01 2014-12-14
uid                  uidfile (xxx) <[email protected]>
sub   3072g/6D72E230 2014-12-14

可以看到**的UID。

查看**签名信息使用gpg –list-sigs,查看**指纹信息使用gpg –fingerprint

查看私钥信息:

gpg --list-secret-keys
/home/pangyi/.gnupg/secring.gpg
-------------------------------
sec   4096R/375B9788 2014-12-13
uid                  xxx (xxxxx) <[email protected]>
ssb   4096R/107FE36C 2014-12-13

sec   3072D/9D4F5F01 2014-12-14
uid                  uidfile (xxx) <[email protected]>
ssb   3072g/6D72E230 2014-12-14

导出**

gpg –export 用于导出**公钥。当有多个**时,需要指定UID或sec处的标识,输入的UID不必完整,能唯一标识就能输出**。但用UID有可能会同时输出多个**来,不如使用sec好。

**会输出到标准输出,可以重定向到文件保存。

导入**

未测试,使用gpg –import [Filename]导入公钥,如果不指定文件则从标准输入导入。

注销**

未测试,使用gpg –gen-revoke注销,需要用到**密码

删除**

未测试,gpg –delete-key

编辑**

gpg –edit-key是编辑**的指令,它能:

签名

没有导入的**,无法测试,本地生成的已经签过:gpg –edit-key UID sign

修改密码

未测试,gpg –edit-key UID passwd

等……

加密文件

加密一个文件,使用“gpg -e -r UID 文件名”来完成。加密后会生成一个原文件名.gpg的文件。

解密文件

解密文件的操作如下:

$ gpg -d -r uidfile test.gpg
gpg: 由 3072 位的 ELG-E **加***匙号为 6D72E230、生成于 2014-12-14
      “uidfile (xxx) <[email protected]>”
test

除前两行显示外的内容是GPG显示到标准输出的内容。它是解密后文件的内容。可以将它重定向生成文件获取解密的文件。可以看到,加密前文件的内容是test。

不知道是不是因为输出内容中有到非标准输出的内容,虽然进程的返回结果是0,但在expect这类脚本语言中会出现报错,无法正常执行。

如果**生成时设置了密码,在解密时会提示输入,如果输入不正解是无法解密的。

在UBUNTU环境中,如果输入过一次密码,那么之后都不用再输入,直到系统重新启动。

劳动所得 不喜勿喷:获取【下载地址】

相关标签: GPG