使用GnuPG加密文件

GnuPG加密情景

42想發送一條消息給55,並且這條消息只有55能看到。首先42和55都用GnuPG生成自己的公鑰和私鑰。然後55把公鑰交給42,公鑰怎麼傳遞都行,不需要保密。42使用自己的私鑰和55的公鑰來把消息加密,生成加密的消息發給55。55拿到加密的消息後用自己的私鑰解密即可看到原始消息。

安卓使用OpenKeychain

F-Droid或Google Play下載OpenKeychain,導入已有證書(公鑰私鑰均可導入)或生成新的證書。然後通過二維碼或你喜歡的其他方式分享公鑰。發送者使用接收者的公鑰和自己的私鑰加密文件,然後發送加密文件給接收者,接收者用自己的私鑰解開文件。使用OpenKeychain,不僅可以方便的加密與解密文件和文本,更可與K-9 Mail搭配實現加密的郵件。

命令行使用GnuPG

Fedora似乎時預裝了GnuPG和GnuPG2,我們可以用gpg和gpg2來使用它。Termux可以使用pkg install gunpg,用法是一樣的,而且版本是最新版。Fedora26比最新版還差一個小版本。我樂於追新,所以這裡都用gpg2。順便提一下,GnuPG念做“格努皮即”。關於GNU有興趣的朋友可以到GNU作業系統與自由軟體運動了解下。

把證書從OpenKeychain導出並導入Fedora的GnuPG2

#手機上選擇要備份的證書,右上角菜單,備份證書
#抄下來44位密碼,勾選已抄下,按一下保存備份
#然後把生成的文件backup_YYYY-MM-DD.pgp傳送的Fedora
#在Fedora上備份文件的所在目錄執行
gpg2 --decrypt backup_YYYY-MM-DD.pgp | gpg2 --import
#按照提示輸入剛剛抄下來44位密碼
#列出已有的密鑰,最長那串就是ID
gpg2 --list-keys
#編輯密鑰
gpg2 --edit-key [ID]
#由於我們是物理傳輸過來的,所以不用對比指紋了,直接trust
trust
5
y
save
#這樣就可以了

其他GnuPG2常用命令

##生成一對密鑰
gpg2 --full-generate-key
#密鑰種類默認RSA和RSA即可
#RSA密鑰長度默認2048即可
#過期日期默認0即永久,後面會講撤銷方法
#繼續輸入名字、郵箱和注釋
#然後就開始生成密鑰了,這時可以做些移動鼠標敲擊鍵盤的動作幫助程序獲取隨機數
#Termux可能要一兩分鐘,Fedora貌似20秒就搞定了
##導入導出刪除撤銷密鑰
#列出已有的密鑰
gpg2 --list-keys
#列出密鑰的指紋
gpg2 --fingerprint
#為密鑰生成撤銷證書
gpg2 --gen-revoke fred42 > revoke_fred42.txt
#導出一把公鑰,-a表示轉換為可打印字符
gpg2 --export -a fred42 > public.key
#導出一把私鑰,-a表示轉換為可打印字符
gpg2 --export-secret-key fred42 > private.key
#導入一把密鑰
gpg2 --import public.key
#刪除一把公鑰
gpg2 --delete-key fred42
#刪除一把私鑰
gpg2 --delete-secret-key fred42
##使用密鑰服務器上傳搜索與下載公鑰
#Please blame the wall

我的公鑰指紋:F296 FC4F B714 BA14 6366 FEDF 15F7 F20A 33D8 3525和公鑰:

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

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
Gck=
=CXuU
-----END PGP PUBLIC KEY BLOCK-----

使用GnuPG生成隨機密碼

生成一個16位的隨機密碼

gpg2 --gen-random -a 0 16 | head -c 16

也可將下面代碼存為password.sh,運行./password.sh 16來獲得。

#!/bin/bash
if [ $# -eq 0 ]
then echo "請指定待生成密碼的長度"
else gpg2 --gen-random -a 0 $1 | head -c $1
echo ""
fi

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *