GPG加密解密與實際應用

2021-08-27 19:56:16 字數 3266 閱讀 4186

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 天後過期

w = 金鑰在 n 週後過期

m = 金鑰在 n 月後過期

y = 金鑰在 n 年後過期

……

金鑰有效期,不用解釋。

您需要乙個使用者標識來辨識您的金鑰;本軟體會用真實姓名、注釋和電子郵件位址組合

成使用者標識,如下所示:

「heinrich heine (der dichter) 」

真實姓名: ***

這個標識會作為以後維護金鑰的標誌,如查詢,匯入匯出,銷毀等操作,將以此為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 *** (***xx) sub 4096r/107fe36c 2014-12-13

pub 3072d/9d4f5f01 2014-12-14

uid uidfile (***) 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 *** (***xx) ssb 4096r/107fe36c 2014-12-13

sec 3072d/9d4f5f01 2014-12-14

uid uidfile (***) 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 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 (***) 」

test

除前兩行顯示外的內容是gpg顯示到標準輸出的內容。它是解密後檔案的內容。可以將它重定向生成檔案獲取解密的檔案。可以看到,加密前檔案的內容是test。

不知道是不是因為輸出內容中有到非標準輸出的內容,雖然程序的返回結果是0,但在expect這類指令碼語言中會出現報錯,無法正常執行。

如果金鑰生成時設定了密碼,在解密時會提示輸入,如果輸入不正解是無法解密的。

在ubuntu環境中,如果輸入過一次密碼,那麼之後都不用再輸入,直到系統重新啟動。

使用 GPG 加密和解密檔案

目標 使用 gpg 加密檔案 發行版 適用於任何發行版 要求 安裝了 gpg 的 linux 或者擁有 root 許可權來安裝它。難度 簡單 約定 介紹 加密非常重要。它對於保護敏感資訊來說是必不可少的。你的私人檔案應該要被加密,而 gpg 提供了很好的解決方案。安裝 gpg gpg 的使用非常廣泛...

加密與解密

using system using system.text using system.security using system.security.cryptography using system.io function 的摘要說明 public class function dec 加密過程 ...

加密與解密

using system using system.collections.generic using system.text using system.security.cryptography using system.io 加密字元 加密字串 加密金鑰 返回加密 public class de...