【原理】
加密:公钥加密,私钥解密[数据保密性]
数字签名:私钥加密,公钥解密[身份认证][数据完整性][不可抵赖性]
【生成gpg密钥】

gpg --gen-keygpg (GnuPG) 1.4.14; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
gpg: 钥匙环‘/root/.gnupg/secring.gpg’已建立
请选择您要使用的密钥种类:   (1) RSA and RSA (default)
   (2) DSA and Elgamal   (3) DSA (仅用于签名)
   (4) RSA (仅用于签名)您的选择? 2DSA 密钥长度应在 1024 位与 3072 位之间。
您想要用多大的密钥尺寸?(2048) 您所要求的密钥尺寸是 2048 位
请设定这把密钥的有效期限。         0 = 密钥永不过期
        = 密钥在 n 天后过期      w = 密钥在 n 周后过期
      m = 密钥在 n 月后过期
      y = 密钥在 n 年后过期
密钥的有效期限是?(0) 密钥永远不会过期
以上正确吗?(y/n) Y
 
您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合
成用户标识,如下所示:
    “Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>”
 
真实姓名: Che Caide
电子邮件地址: checaide@outlook.com
注释: Personal Digital Signatures
您选定了这个用户标识:
    “Che Caide (Personal Digital Signatures) <checaide@outlook.com>”
 
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? o
您需要一个密码来保护您的私钥。
 
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
gpg: WARNING: some OpenPGP programs can not handle a DSA key with this digest size.++++++++++..+++++..++++++++++.++++++++++.+++++.++++++++++.+++
++.+++++.++++++++++.+++++..++++++++++++++++++++..+++++++++++
+++++++++.+++++++++++++++..+++++>+++++>+++++.............................
...<.+++++>..+++++....................>+++++....................<.+++++<+++++.+++++ 随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵! (还需要39字节) 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。 .+++++..++++++++++++++++++++++++++++++.++++++++++++++++++++. +++++.++++++++++.+++++.+++++.+++++....+++++...+++++..++++++++ ++...+++++.+++++++++++++++..+++++...+++++++++++++++>.+++++++
+++>.+++++>.+++++..........................+++++^^^
gpg: 密钥 68399613 被标记为绝对信任
公钥和私钥已经生成并经签名。
 
gpg: 正在检查信任度数据库
gpg: 需要 3 份勉强信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性:  1 已签名:  0 信任度:0-,0q,0n,0m,0f,1u
pub   2048D/68399613 2013-10-11
      密钥指纹 = 7653 FFC9 B461 FFF2 F965  D9B4 CB4F 7150 6839 9613uid                  Che Caide (Personal Digital Signatures) <checaide@outlook.com>sub   2048g/5D9FF622 2013-10-11

【查看密钥】

gpg --list-keysroot/.gnupg/pubring.gpg------------------------pub   2048D/68399613 2013-10-11uid                  Che Caide (Personal Digital Signatures) <checaide@outlook.com>sub   2048g/5D9FF622 2013-10-11 
gpg --fingerprint/root/.gnupg/pubring.gpg------------------------pub   2048D/68399613 2013-10-11
      密钥指纹 = 7653 FFC9 B461 FFF2 F965  D9B4 CB4F 7150 6839 9613uid                  Che Caide (Personal Digital Signatures) <checaide@outlook.com>sub   2048g/5D9FF622 2013-10-11 
gpg --list-public-keysgpg --list-secret-keys

【修改密钥】

gpg --edit-key Che Caide
gpg (GnuPG) 1.4.14; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
 
私钥可用。
 
pub  2048D/68399613  创建于:2013-10-11  有效至:永不过期       可用于:SC  
                     信任度:绝对        有效性:绝对
sub  2048g/5D9FF622  创建于:2013-10-11  有效至:永不过期       可用于:E   
绝对 (1). Che Caide (Personal Digital Signatures) <checaide@outlook.com> 
无效的指令(尝试“help”) 
gpg> helpquit        离开这个菜单
save        保存并离开help        显示这份在线说明
fpr         显示密钥指纹
list        列出密钥和用户标识
uid         选择用户标识 N
key         选择子钥 N
check       检查签名
sign        为所选用户标识添加签名[* 参见下面的相关命令]lsign       为所选用户标识添加本地签名
tsign       为所选用户标识添加信任签名
nrsign      为所选用户标识添加不可吊销签名
adduid      增加一个用户标识
addphoto    增加一个照片标识
deluid      删除选定的用户标识
addkey      添加一个子钥
addcardkey  在智能卡上添加一把密钥
keytocard   将一把密钥移动到智能卡上
bkuptocard  将备份密钥转移到智能卡上
delkey      删除选定的子钥
addrevoker  增加一把吊销密钥
delsig      删除所选用户标识上的签名
expire      变更密钥或所选子钥的使用期限
primary     设定首选用户标识
toggle      在私钥和公钥清单间切换
pref        列出首选项(专家模式)showpref    列出首选项(详细模式)setpref     设定所选用户标识的首选项
keyserver   设定所选用户标识的首选公钥服务器的 URL
notation    为所选用户标识的设定注记passwd      更改密码
trust       更改信任度
revsig      吊销所选用户标识上的签名
revuid      吊销一个用户标识
revkey      吊销密钥或选定的子钥enable      启用一把密钥
disable     禁用一把密钥
showphoto   显示照片标识
clean       压缩不可用的用户标识并删除不可用的签名
minimize    压缩不可用的用户标识并删除所有签名
 * ‘sign’命令可以带‘l’前缀(lsign)以添加本地签名,或‘t’前缀(tsign)以添加
  信任签名,或‘nr’前缀(nrsign)以添加不可吊销签名,或者以上三种前缀的任何组
  合(ltsign、tnrsign 等)。
 
gpg> quit

【导出密钥】
公钥

gpg --export --armor Che Caide > MY-PGP-PUBLIC-KEY.asc #导出为ASCII字符形式gpg --export Che Caide > MY-PGP-PUBLIC-KEY.gpg #导出为二进制形式

私钥

gpg --export-secret-key --armor Che Caide > MY-PGP-PRIVATE-KEY.asc #导出为ASCII字符形式gpg --export-secret-key Che Caide > MY-PGP-PRIVATE-KEY.gpg #导出为二进制形式

【导入密钥】

gpg --import 密钥文件

【加/解密】
公钥加密

gpg --encrypt --recipient "Che Caide" test.txt #欲加密文件 生成二进制形式 文件名test.txt.gpggpg --encrypt --armor --recipient "Che Caide" test.txt #欲加密文件 生成ASCII字符形式 文件名test.txt.asc

私钥解密

gpg --decrypt test.txt.gpg > test.txt
gpg --decrypt test.txt.asc > test.txt

【签名/验证】
私钥签名

gpg --local-user "Che Caide" --sign --armor ok.txt #生成包含签名加密的文件gpg --detach-sign --armor ok.txt #生成独立的签名文件gpg --clearsign --armor ok.txt #生成包含明文内容和数字签名的文件

公钥验证

gpg --verify ok.txt.asc   #只验证签名真实性gpg --decrypt ok.txt.asc > ok.txt  #验证并还原信息

gpg命令详解
语法:gpg [选项] [文件名]
签名、检查、加密或解密
默认的操作依输入数据而定

指令:

-s, –sign [文件名] 生成一份签名
–clearsign [文件名] 生成一份明文签名
-b, –detach-sign 生成一份分离的签名
-e, –encrypt 加密数据
-c, –symmetric 仅使用对称加密
-d, –decrypt 解密数据(默认)
–verify 验证签名
–list-keys 列出密钥
–list-sigs 列出密钥和签名
–check-sigs 列出并检查密钥签名
–fingerprint 列出密钥和指纹
-K, –list-secret-keys 列出私钥
–gen-key 生成一副新的密钥对
–delete-keys 从公钥钥匙环里删除密钥
–delete-secret-keys 从私钥钥匙环里删除密钥
–sign-key 为某把密钥添加签名
–lsign-key 为某把密钥添加本地签名
–edit-key 编辑某把密钥或为其添加签名
–gen-revoke 生成一份吊销证书
–export 导出密钥
–send-keys 把密钥导出到某个公钥服务器上
–recv-keys 从公钥服务器上导入密钥
–search-keys 在公钥服务器上搜寻密钥
–refresh-keys 从公钥服务器更新所有的本地密钥
–import 导入/合并密钥
–card-status 打印智能卡状态
–card-edit 更改智能卡上的数据
–change-pin 更改智能卡的 PIN
–update-trustdb 更新信任度数据库
–print-md 算法 [文件]
使用指定的散列算法打印报文散列值

选项:

-a, –armor 输出经 ASCII 封装
-r, –recipient 某甲 为收件者“某甲”加密
-u, –local-user 使用这个用户标识来签名或解密
-z N 设定压缩等级为 N (0 表示不压缩)
–textmode 使用标准的文本模式
-o, –output 指定输出文件
-v, –verbose 详细模式
-n, –dry-run 不做任何改变
-i, –interactive 覆盖前先询问
–openpgp 行为严格遵循 OpenPGP 定义
–pgp2 生成与 PGP 2.x 兼容的报文

【rpm包签名】
# 修改/usr/lib/rpm/macros宏变量里面的签名变量。

sed -i "s/^#\%\_gpg\_name$/\%\_gpg\_name Che Caide (Personal Digital Signatures) \<checaide@outlook.com\>/" /usr/lib/rpm/macros 
sed -i "s/^#\%\_signature$/\%\_signature gpg/" /usr/lib/rpm/macros 
# 修改值如下%_signature gpg%_gpg_name Che Caide (Personal Digital Signatures) <checaide@outlook.com> # 用私钥重新签名.rpm包,&将公钥发布rpm --resign xxxx.rpm