歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux命令學習手冊-GPG命令

Linux命令學習手冊-GPG命令

日期:2017/2/28 14:22:58   编辑:Linux教程

[功能]

GPG是加密和數字簽名的免費工具,大多用於加密信息的傳遞。除了僅用密碼加密外,GPG最大的不同是提供了“公鑰/私鑰”對。利用你的“公鑰”別人加密信息不再需要告訴你密碼,隨時隨地都能發送加密信息。而這種加密是單向的,只有你的“私鑰”能解開加密。數字簽名又是另一大使用方向。通過簽名認證,別人能確保發布的消息來自你,而且沒有經過修改。

[原理]

對稱密鑰加密常用的算法DES、Triple DES或IDEA加密,MD5。對稱密鑰加密通信雙方持有同樣的密鑰對密文進行解密。

公共密鑰加密在報文和網絡方面的應用已成為流行。RSA實際上用於公共密鑰加密,它是當前所能得到的最強的公共密鑰算法。公共密鑰包含兩個同屬於一方的密鑰:一個是公共密鑰,它被所有人所共享;另一個是私有密鑰,歸個人秘密中存。與對稱密鑰加密不同,公共密鑰加密對加密與解密使用兩把密鑰。一把是秘密的,這是私有密鑰,用來對密文解密。密文本身由公共密鑰產生,公共密鑰分發給要發送加密信息給你的人。其他人如何得到你的公共密鑰?很容易,發布它即可。你—私有密鑰的所有者,是惟一能對信息進行解密的人。

數字簽名常用公共密鑰加密來產生簽名,如 RSA和DSA。用公共密鑰產生數字簽名與信息加密的工作相反。信息通過hash函數發送。hash處理後的信息用私有密鑰加密。一旦數據用私有密鑰加密,任何持有公共密鑰的人都能檢驗,它是用私有密鑰產生的,這樣,數據就被驗證了。因此,任何持有公共密鑰的人都可以進行檢驗。這裡的hash函數用於產生數字簽名。Hash函數(散列函數)是一個提取信息和產生一個固定長度的信息個性特征的數學函數。無論要進行hash方法的信息有多大,輸出的長度都一樣。簡言之,就是將hash處理後的信息用私鑰加密,其它人用公鑰解密恢復成功(恢復成的應該是hash處理的結果?)表示加密的人就是你也就是數字簽名的驗證就成功了。

[舉例]

**對稱加密和解密

這裡,先簡單介紹使用gpg進行對稱加密和解密,後面重點介紹公鑰加密和數字驗證。

*對稱加密myfile:

#gpg -c myfile

這樣,會提示你輸入兩次密碼,然後生成myfile的加密文件myfile.gpg,注意不能對目錄加密,可以用-o選項指定輸出文件名稱。

*解密對稱加密的文件:

#gpg -o mydecrypt -d myfile.gpg

這樣,會提示你輸入解密密碼,輸入之後,將會解密相應的文件,通過-o指定生成的解密文件,-d指定被解密的文件。

**

**公鑰加密相關

*生成鑰匙對:

[root@lv-k ~]# gpg --gen-key

輸入之後,輸出和交互提示如下所示:

#####################以下為輸出以及交互##############################

gpg (GnuPG) 1.4.5; Copyright (C) 2006 Free Software Foundation, Inc.

This program comes with ABSOLUTELY NO WARRANTY.

This is free software, and you are welcome to redistribute it

under certain conditions. See the file COPYING for details.


gpg: 已創建目錄‘/root/.gnupg’

gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立

gpg: 警告:在‘/root/.gnupg/gpg.conf’裡的選項於此次運行期間未被使用

gpg: 鑰匙環‘/root/.gnupg/secring.gpg’已建立

gpg: 鑰匙環‘/root/.gnupg/pubring.gpg’已建立

請擇您要使用的密鑰種類:

(1) DSA 和 ElGamal (默認)

(2) DSA (僅用於簽名)

(5) RSA (僅用於簽名)

您的擇?[Enter] <====輸入

DSA 密鑰對會有 1024 位。

ELG-E 密鑰長度應在 1024 位與 4096 位之間。

您想要用多大的密鑰尺寸?(2048)[Enter] <====輸入

您所要求的密鑰尺寸是 2048 位

請設定這把密鑰的效期限。

0 = 密鑰永不過期

<n> = 密鑰在 n 天後過期

<n>w = 密鑰在 n 周後過期

<n>m = 密鑰在 n 月後過期

<n>y = 密鑰在 n 年後過期

密鑰的效期限是?(0)[Enter]

密鑰永遠不會過期

以上正確嗎?(y/n)y <====輸入


您需要一個用戶標識來辨識您的密鑰;本軟件會用真實姓名、注釋和電子郵件地址組合

成用戶標識,如下所示:

“Heinrich Heine (Der Dichter) <[email protected]>”


真實姓名:linuxidc <====輸入

電子郵件地址:[email protected] <====輸入

注釋:test <====輸入

您定了這個用戶標識:

“linuxidc (test) <[email protected]>”

更改姓名(N)、注釋(C)、電子郵件地址(E)或確定(O)/退出(Q)?o <====輸入

您需要一個密碼來保護您的私鑰。


請輸入密碼:<====輸入

請再輸入一次密碼:<====輸入


我們需要生成大量的隨機字節。這個時候您可以多做些瑣事(像是敲打鍵盤、移動

鼠標、讀寫硬盤之類的),這會讓隨機數字發生器有更好的機會獲得足夠的熵數。

++++++++++.+++++++++++++++.++++++++++.++++++++++++++++++++++++++++++.++++++++++++++++++++.+++++++++++++++++++++++++.++++++++++++++++++++>+++++.+++++........................................+++++

我們需要生成大量的隨機字節。這個時候您可以多做些瑣事(像是敲打鍵盤、移動

鼠標、讀寫硬盤之類的),這會讓隨機數字發生器有更好的機會獲得足夠的熵數。

+++++++++++++++.+++++++++++++++.++++++++++++++++++++.+++++++++++++++++++++++++..++++++++++.+++++.+++++..++++++++++.++++++++++.++++++++++..+++++++++++++++..+++++>++++++++++>+++++...........................................................................+++++^^^

gpg: /root/.gnupg/trustdb.gpg:建立了信任度數據庫

gpg: 密鑰 DDBA2DEA 被標記為絕對信任

公鑰和私鑰已經生成並經簽名。


gpg: 正在檢查信任度數據庫

gpg: 需要 3 份勉強信任和 1 份完全信任,PGP 信任模型

gpg: 深度:0 有效性: 1 已簽名: 0 信任度:0-,0q,0n,0m,0f,1u

pub 1024D/DDBA2DEA 2011-06-14

密鑰指紋 = 790A 0F2D 6826 61F3 A749 0724 DBB2 C0A5 DDBA 2DEA

uid linuxidc (test) <[email protected]>

sub 2048g/2BBE2C91 2011-06-14


#####################以上為輸出以及交互##############################

這裡,首先要一個鑰匙對才能公鑰加密,這裡根據系統情況不同,可能內容為英文。需要用戶交互輸入的地方,都通過"<====輸入"這個標記指出來了。若對輸入信息有所改動 ,可把 ~/.gnupg 目錄下除 options 以外的文件刪除 ,再運行 gpg --gen-key 命令 ,或者使用 gpg 的 edit 選項 . 鑰匙對放在 ~/.gnupg 目錄下 .


*查看已有的鑰匙:

[root@lv-k .gnupg]# gpg --list-keys

輸入之後,輸出如下:

#####################以下為輸出以及交互##############################

/root/.gnupg/pubring.gpg

------------------------

pub 1024D/DDBA2DEA 2011-06-14

uid linuxidc (test) <[email protected]>

sub 2048g/2BBE2C91 2011-06-14

#####################以上為輸出以及交互##############################

這裡,

pub(公匙)--- public key , ID : DDBA2DEA

sub(私匙)--- secret key or private key , ID : 2BBE2C91

假如沒使用root進行操作,可能會輸出如下信息:"gpg: Warning: using insecure memory!" 警告沒有鎖定內存頁 ,一般是連接網上操作有關安全方面的問題 ,沒有事情的 ,可以作這樣的改動 "# chmod 4755 /usr/bin/gpg"。

*使用gpg密鑰進行加密和解密文件:

下面我們通過一個具體的例子,演示公鑰加密,私鑰解密的過程。這裡加/解密方式采用RSA算法,公匙與私匙是互補,理論上是不可破解,也沒有人嘗試成功過。假設我們已經使用前面的方法生成了密鑰對。

1,首先查看待加密的文件如下:

[root@lv-k gpg_test]# ls

mygpgtest

[root@lv-k gpg_test]# cat mygpgtest

#####################以下為輸出##############################

hello!

welcome come to here

today is 2011-06-14

#####################以上為輸出##############################


2,公鑰加密過程

1)使用如下命令加密文件:

[root@lv-k gpg_test]# gpg -ea -r linuxidc mygpgtest

這裡,使用的密鑰就是前面創建的linuxidc,我們可以使用"gpg --list-keys"來查看我們可以選擇用來加密的公鑰。這裡選項"-e"實際就是"--encrypt"表示加密數據;"-a"表示創建ASCII的輸出(可以不用這個選項,這樣生成的文件就不是ASCII的內容了,並且文件後綴是*.gpg);"-r"指定加密的用戶id名稱。


2)查看加密之後的文件:

[root@lv-k gpg_test]# ls

mygpgtest mygpgtest.asc

[root@lv-k gpg_test]# cat mygpgtest.asc

#####################以下為輸出##############################

-----BEGIN PGP MESSAGE-----

Version: GnuPG v1.4.5 (GNU/Linux)


hQIOA6PEEmMrviyREAf9HCZ5xIlSppneZ6i7Hquxb7xUjn1q0W5ccVek6x0DxSbH

q55ugy6CmCc/excLC/zblf9qHsNDcZvMV3jjD95gu78NR1lsyDtpG9r5bX/MuPii

KxYc3oOvGNmDUO9F/g3ul9VCu/rsIkQvwxZHaEGXR3G6XH/tmhKZcjNNIxb1qQiq

xE7O0NCXEhp8FpOPozY1MzZ7wv4rXLujTrGl13sNqjSVLgp1mcUzuMRCtenttXpg

q1sXDJ7FXkxQy7UvO8eMmMzPqkFm7KfLYZjkXrYo5ZhG+nfXqs3/HSuJ1fVe8m4/

+PVW1Uw2QtkfJiZVxOj60cV0lcK/P1bJHah5xEtbnQf/fI1jitFIuoJjTkoCNbeO

Sq6Kr0+LjJMaXmlCeA6kZ7RXLHak/O5aR0BpXJCPUBIEFVnu6dftolO6JPcqMbW+

5oI4NHaJunHz0eTgOuFBsV3EVjYmH7rabV832ikY0MARWRh/b/osUv+Ht9BlUHaY

pLoGPXkLeSsCDo714Z/dufLGUEFcNxx/QAmhWGiKH4MacMvKBVE+2uzcMAWqnyEW

Oaz0bI893YUtbQbti2rdQgVdHHXjWCmQ2YnMWv4pSBAwK7rPOrtehmdsmiOuit6x

FHvHPldc1o38u0Jg4d0LjCv/rRBdQwasJzr46dwJBOCv5rQ9Rkuul+6rhFQGns1G

jtJxAZIWwu8ZqD572a3jYVbIl/qBAW+dM3Fnt9NRqFUJVtdrd/AIAFm/OIwlVACF

Cbmjyxqliv/WYxNdJFL+IsHMX2Ury9TT2LMaDXxez6LRPMxJxRZSFhuyoYAqDYKT

NI1LSODDRZ1WYlCOkPXlrSfzyig=

=IN1g

-----END PGP MESSAGE-----

#####################以上為輸出##############################

這裡,我們可以看出,加密之後���成mygpgtest.asc文件,其中的內容已經經過加密了。


3,公鑰解密過程

1)使用如下命令進行解密:

[root@lv-k gpg_test]# gpg -o mydecrypt --decrypt mygpgtest.asc

#####################以下為輸出##############################

您需要輸入密碼,才能解開這個用戶的私鑰:“linuxidc (test) <[email protected]>”

2048 位的 ELG-E 密鑰,鑰匙號 2BBE2C91,建立於 2011-06-14 (主鑰匙號 DDBA2DEA)


請輸入密碼:<=====輸入密碼

您需要輸入密碼,才能解開這個用戶的私鑰:“linuxidc (test) <[email protected]>”

2048 位的 ELG-E 密鑰,鑰匙號 2BBE2C91,建立於 2011-06-14 (主鑰匙號 DDBA2DEA)


gpg: 由 2048 位的 ELG-E 密鑰加密,鑰匙號為 2BBE2C91、生成於 2011-06-14

“linuxidc (test) <[email protected]>”

#####################以上為輸出##############################

這裡,使用-o指定輸出文件,使用--decrypt指定待解密文件。我們可以看出,解密的時候,我們需要輸入密碼,才能解密成功,而密碼就是之前我們創建鑰匙對時候輸入的那個密碼。注意,這裡因為生成密鑰,加密,解密都在一個機器上進行,所以可以成功解密,如果把加密之後的文件拿到別的機器上面,就無法解密了,如果想要在其它機器上面解密,我們需要把本地私鑰導出,發送給待解密的機器,然後在解密的機器上把剛剛導出的私鑰導入,就行了.後面會說到如何解密。如果想要別人和你使用這個加密的方法通信,需要把你的公鑰導出,發給別人,然後他們把這個公鑰導入,在使用前面加密的方法用這個公鑰加密數據並且發送給你,你再用你自己的私鑰解密,得到解密後的原始數據,這也是公鑰加密通信使用的常用方法。後面會詳細講述如何導出本地的公鑰和私鑰,以及如何在其它機器上面導入之前導出的密鑰。


2)查看解密生成的文件

[root@lv-k gpg_test]# ls

mydecrypt mygpgtest mygpgtest.asc

[root@lv-k gpg_test]# cat mydecrypt

hello!

welcome come to here

today is 2011-06-14

[root@lv-k gpg_test]#


*導出(備份)公鑰:

[root@lv-k gpg_test]# gpg -o mypubkey --export DDBA2DEA

這裡使用格式“ gpg -o keyfilename --export KeyID”,使用-o指定生成的導出文件名稱,使用--export指定想要導出的密鑰ID, 如果沒有KeyID則是備份所有的公鑰,如果加上-a的參數則輸出文本格式的信息,否則輸出的是二進制格式信息。導出的公鑰,可以發布,其它人只要導入你發布的公鑰,就能用這個公鑰加密數據並且發送給你,你再用你自己的私鑰解密,得到解密後的原始數據,這也是公鑰加密通信使用的常用方法。


*以文本方式導出公鑰:

[root@lv-k gpg_test]# gpg -a -o mypubkeyascii --export DDBA2DEA

導出的文件mypubkeyascii可以查看其內容,這裡內容如下:

mypubkeyascii

-----BEGIN PGP PUBLIC KEY BLOCK-----

Version: GnuPG v1.4.5 (GNU/Linux)


mQGiBE320yYRBACUvTPS5Jxv2xamVudHL//PBhJESyUzHQcGtb/CPzyAkOaNVQ7U

V0DEjd+m61SAv7wwWItn9D3fOjZ09EdGY/9mHeVEOGLPdB7Seo28UyRtr6vHCrrl

1qHBS6I6jQ/iATDg+07O9hgDp5eCebI4aNyRGeRARx0t5vKguIF+FEzmIwCghWM8

toTSnP/bC1VePRXEZ9Uw+OkD/0cYIH2AZIKdbtjQ9J6F7AtgiPqRnjiTL7mOj6Xa

ncjThX9XGH5DUMoqR6Gaq9/eDtlefMwHCweiqdm1TNnvU/b7qDpw1TjxVLkHHVZk

8F4f8LsSkJNuLiqOwXwOJkuevQZ+Y3quFl3nsOtURSx5nuKkekp4toOWSe3fEFWd

BQN5A/9Cxj55KWXzzYD8v+z0xiC3HvIWgUp0GTfcjSOfdhs9xtKe33LuGy7hoEt0

TfQpTnz8Il1cbHHYvtmAaaGrwBnBxoYrLrH5WrHx1n34ZdOszYK5p/yKW+g+0eLt

dv/f4uXEhfPInOk21X5PRGFcyNo3fMVGIHo1S8oiEX4fuEvwWrQqcXVpZXRoZWFy

dCAodGVzdCkgPHF1aWV0X2hlYXJ0MDAwQDEyNi5jb20+iGAEExECACAFAk320yYC

GwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRDbssCl3bot6o2bAJ918FqgoPMs

4eIQOWBDVs5sS9hSbgCfTbOggNKPJtCPJq4zr/jaPctE7Qi5Ag0ETfbTLBAIAKUn

cibGAlBwN5nW2NCN52oXWAsIXTDnUP7FmKi8K6B2PO7Bex2e95f44iOyBtLo73KF

vH64Wbl7wGQ0IOnn/AQbivoa9oaBi4+2mf9PbGMvo2Nrii8xcvBfvrh8Q7XsRoOH

obKv3inOGvxb0fkdUn1WkyYGtWCIl5aK8b1jUACuB6Sbdxtkeg3DrQp3BZjxgkVa

etgPnj70AtJfTFnn5WSIkBGJq2pbs7E9wNQC7NvIe62DHJj1nsPJg/d9ZdFWnQiW

HO6ik3bjRBLR4Iy82cjVOI2JmiaKVlPktphZ9id5F/a3BlcaOF5wSovE4ssHdZGN

cvk4QPLr0X9G43ZBTmcAAwUH/07bUjqWu61uIq5XryRK99pTNLlwd1AdsB/HTgFp

UJxSZ7MRbtozvdBPVKFehAzZ13YSjiES0f1L3oGBsEeEhCPyHY+N80R+zuLMeZTx

6kFNLlm/PEFNrnFpqGPEJZ/1HRyt+hTsfFCFM4nYzhul7s10XKGiHHN1wUMc/ixt

+tmk/dD6IA/QnhI1WUMzF2XgJ3Ql4ZmLCSNV7CXPEt044J8ZnuTT+HwO4AX7bfSt

PTpyi7LMD/BVfOikczvf38Bz/IUnXi8x1pjBglZBE7jvkqc+nqe7BYQ/ga27c374

zQDIAmAXcZ0TR35T+ZiyavQHKiRSuAG0q3T2oO74yvb8AgmISQQYEQIACQUCTfbT

LAIbDAAKCRDbssCl3bot6uJ8AJ4h8ShsY6DLjmJjitl+8iHnh5tZQACeOqHsQXjr

dei6gV8vMB87xwbWe5E=

=ynen

-----END PGP PUBLIC KEY BLOCK-----

一般,許多地方網上通過這個文本方式發布公鑰。


*導出(備份)私鑰:

[root@lv-k gpg_test]# gpg -o mysubkey --export-secret-keys 2BBE2C91

如果沒KeyID則是備份所有的私鑰,-o表示輸出到文件mysubkey中,如果加上-a的參數則輸出文本格式的信息,否則輸出的是二進制格式信息。


*導入私鑰:

gpg --import mysubkey

輸入之後,輸出如下:

#####################以下為輸出##############################

gpg: 密鑰 DDBA2DEA:私鑰已導入

gpg: /home/lv-k/.gnupg/trustdb.gpg:建立了信任度數據庫

gpg: 密鑰 DDBA2DEA:公鑰“linuxidc (test) <[email protected]>”已導入

gpg: 合計被處理的數量:1

gpg: 已導入:1

gpg: 讀取的私鑰:1

gpg: 導入的私鑰:1

#####################以上為輸出##############################

這裡,如果導入公鑰命令是一樣的,不過指定的文件應該是"mypubkey"了。這個命令是另外一台機器上運行的,導入私鑰之後那個機器就可以使用這個私鑰解密數據了。一般來說我們都是發布公鑰讓人導入,而不是導入私鑰匙。

實踐發現,

*導入私鑰之後,另外一台機器直接可以用對應的公鑰加密,而不用導入公鑰;這時候另外的那個機器也可以導出公鑰,不過有一行內容和原始機器公共鑰匙內容不一樣,但是用這個公鑰加密的數據也可以用原始的機器解密出來的。

*導入公鑰之後,另外一台主機無法導出私鑰,可以導出公鑰,導出內容和原來一樣。使用公鑰加密之後,無法解密(因為沒有私鑰)。

無論導入的是公鑰還是私鑰,導入之後可以通過gpg --list-keys來查看導入的結果,而且從結果可以看到沒有導入的那個配對(或者私鑰或者公鑰)的KeyID。

**


**簽名與驗證

簽名作用是驗證明文、加密文件、密鑰是來自正確的發送者的,沒經過其它人的修改。簽名使用的也是密鑰對,與加密操作相同。只是在結果上,點不同。它只是在文件最後添上加密的驗證信息(簽名)。一旦文件有所改變,簽名驗證就會出錯。比如我們Ubuntu安裝軟件時,首先要用事先保存的密鑰(大多從hkp://keyserver.ubuntu.com獲得)驗證軟件源的簽名,以保證我們連的是正確的安全的下載服務器。

*查看之前的目錄和文件如下:

[root@lv-k gpgtest]# pwd

/root/tmpTrans/gpgtest

[root@lv-k gpgtest]# ls

mydecrypt

[root@lv-k gpgtest]# cat mydecrypt

hello!

welcome come to here

today is 2011-06-14


*生成簽名,過程如下:

[root@lv-k gpgtest]# gpg -o mydecrypt.sig -s mydecrypt

#####################以下為輸出##############################

您需要輸入密碼,才能解開這個用戶的私鑰:“linuxidc (test) <[email protected]>”

1024 位的 DSA 密鑰,鑰匙號 DDBA2DEA,建立於 2011-06-14


請輸入密碼: <====這裡輸入你的密碼

#####################以上為輸出##############################

[root@lv-k gpgtest]# ls

mydecrypt mydecrypt.sig

這裡可以看到生成了mydecrypt.sig文件(其內容是亂碼),其中,mydecrypt是原文件,mydecrypt.sig包含了原文件和簽名,是二進制的,這個命令會要求你輸入私鑰密碼。


*產生文本格式的簽名

[root@lv-k gpgtest]# gpg -o mydecrypt.sig --clearsign mydecrypt

#####################以下為輸出##############################


您需要輸入密碼,才能解開這個用戶的私鑰:“linuxidc (test) <[email protected]>”

1024 位的 DSA 密鑰,鑰匙號 DDBA2DEA,建立於 2011-06-14


請輸入密碼: <====這裡輸入你的密碼

#####################以上為輸出##############################

[root@lv-k gpgtest]# cat mydecrypt.sig

-----BEGIN PGP SIGNED MESSAGE-----

Hash: SHA1


hello!

welcome come to here

today is 2011-06-14

-----BEGIN PGP SIGNATURE-----

Version: GnuPG v1.4.5 (GNU/Linux)


iD8DBQFOCFkQ27LApd26LeoRAvC+AJ9xp1HLT6zup7AZtan5qpQrpQyn1QCfV0Zy

HG+z+/hxfrbs9pzo6ODYDG4=

=o1+k

-----END PGP SIGNATURE-----

這裡,通過以上可知產生的mydecrypt.sig同樣包含原文件和簽名,文件是文本格式的,原文件不變。解開和驗證簽名的方法


*驗證簽名:

[root@lv-k tmp]# gpg --verify mydecrypt.sig

gpg: 於 2011年06月27日 星期一 17時58分39秒 CST 創建的簽名,使用 DSA,鑰匙號 DDBA2DEA

gpg: 完好的簽名,來自於“linuxidc (test) <[email protected]>”

這裡,在驗證之前,必須導入文件作者的公鑰,對於分離式簽名最後還要加上原文件參數(後面會講到)。


*將簽名文件恢復

[root@lv-k tmp]# gpg -o my --decrypt mydecrypt.sig

gpg: 於 2011年06月27日 星期一 17時58分39秒 CST 創建的簽名,使用 DSA,鑰匙號 DDBA2DEA

gpg: 完好的簽名,來自於“linuxidc (test) <[email protected]>”

[root@lv-k tmp]# cat my

hello!

welcome come to here

today is 2011-06-14

這裡,不需要輸入密碼,生成的文件my和原來的文件名稱一樣。


*簽名並加密:

[root@lv-k gpgtest]# gpg -o mydecrypt.sig -ser linuxidc mydecrypt

#####################以下為輸出##############################


您需要輸入密碼,才能解開這個用戶的私鑰:“linuxidc (test) <[email protected]>”

1024 位的 DSA 密鑰,鑰匙號 DDBA2DEA,建立於 2011-06-14


請輸入密碼: <====這裡輸入你的密碼

#####################以上為輸出##############################

這裡,無法直接通過"gpg --verify mydecrypt.sig"對文件mydecrypt.sig進行驗證。而是在解密恢復文件的時候直接驗證了,後面會說到。


*恢復加密的簽名文件:

[root@lv-k gpgtest]# gpg -o my --decrypt mydecrypt.sig

#####################以下為輸出##############################

您需要輸入密碼,才能解開這個用戶的私鑰:“linuxidc (test) <[email protected]>”

2048 位的 ELG-E 密鑰,鑰匙號 2BBE2C91,建立於 2011-06-14 (主鑰匙號 DDBA2DEA)


請輸入密碼: <====這裡輸入你的密碼,輸入之後提示自動消失

gpg: 由 2048 位的 ELG-E 密鑰加密,鑰匙號為 2BBE2C91、生成於 2011-06-14

“linuxidc (test) <[email protected]>”

gpg: 於 2011年06月27日 星期一 18時11分27秒 CST 創建的簽名,使用 DSA,鑰匙號 DDBA2DEA

gpg: 完好的簽名,來自於“linuxidc (test) <[email protected]>”

#####################以上為輸出##############################

[root@lv-k gpgtest]# cat my

hello!

welcome come to here

today is 2011-06-14

這裡,解密之後進行驗證,而不是直接驗證,因為不能通過"gpg --verify mydecrypt.sig"直接驗證加密的簽名文件。

*分離式簽名:

[root@lv-k gpgtest]# gpg -o mydecrypt.sig -ab mydecrypt

#####################以下為輸出##############################


您需要輸入密碼,才能解開這個用戶的私鑰:“linuxidc (test) <[email protected]>”

1024 位的 DSA 密鑰,鑰匙號 DDBA2DEA,建立於 2011-06-14


請輸入密碼: <====這裡輸入你的密碼,輸入之後提示自動消失

#####################以上為輸出##############################

[root@lv-k gpgtest]# cat mydecrypt.sig

-----BEGIN PGP SIGNATURE-----

Version: GnuPG v1.4.5 (GNU/Linux)


iD8DBQBOCZDP27LApd26LeoRArTQAJ9q13/4jVvJbg5f83lNnoC1Gq111wCfWRm8

1awHtUl2sN9SWNt0qNoFQHw=

=ySnh

-----END PGP SIGNATURE-----

這裡,mydecrypt.sig僅包含簽名,分離式簽名的意思是原文件和簽名是分開的。b選項表示分離式簽名detach-sign.


*對分離的簽名進行驗證:

[root@lv-k gpgtest]# gpg --verify mydecrypt.sig mydecrypt

gpg: 於 2011年06月28日 星期二 16時29分03秒 CST 創建的簽名,使用 DSA,鑰匙號 DDBA2DEA

gpg: 完好的簽名,來自於“linuxidc (test) <[email protected]>”

這裡,和前面的驗證方式不同,因為簽名和數據文件是分離的,所以驗證時,指明簽名文件"mydecrypt.sig"的同時也要指明相應的數據文件"mydecrypt"。因為簽名是分離的,所以不需要使用"--decrypt"進行恢復,如果恢復那麼也僅僅是打印出簽名的信息(這裡"恢復"的時候不用指明數據文件,會提醒你指出數據文件的位置)。

**


[其他]

**編輯公鑰

可以對公鑰進行編輯,這裡沒具體實踐,大致過程如下:

#gpg --edit-key someone

someone是別人的用戶id,輸入之後,出現命令提示符號。

>fpr <===輸入這個表示查看someone的指紋,核對信息真實性,這樣之後簽署。

>sign <===輸入這個簽署公鑰,這樣以後再使用它加密的時候不會產生警告了。

>check <===輸入這個,檢查someone已有的鑰匙的簽名。

>quit <===輸入這個,退出交互,可能會提示你保存之前的設置。

**

openSUSE下玩轉GPG圖文詳解 http://www.linuxidc.com/Linux/2015-01/112425.htm

Linux下gpg的簡單應用 http://www.linuxidc.com/Linux/2013-06/85291.htm

GPG作者差點破產,危機已過 http://www.linuxidc.com/Linux/2015-02/113004.htm

Copyright © Linux教程網 All Rights Reserved