org-mode 除了可以讓你自由自在的寫筆記、文章以外,有些時候我們的筆記某 些區域會希望是能夠進行加密的,這時候透過 emacs 的 Easy PG 功能,可以很方 便的只對文章的某個區域進行加/解密的動作,本文將描述如何在 emacs 下對 org-mode 文件進行加密。
若您想了解這個功能是否適合您,可以先看一下截圖:
環境配置
在使用本文章的資訊之前,你必須確保你的系統安裝有 gnupg,以下列出幾個常見 的 Linux 系統的安裝方式,在大多數的情況下,你不需要自行安裝這些軟體。
Linux Distro | Install Commands |
---|---|
Debian / Ubuntu | apt-get install gpg |
Redhat / Fedora | yum install gnupg |
Gentoo | emerge app-crypt/gnupg |
.emacs 配置
要使用這個功能,你必須在你的 .emacs (emacs 設定文件) 下加入以下資訊。
這邊提供我所使用的範本,各設定的詳細功能則會在後面說明。
;; org-mode 設定 (require 'org-crypt) ;; 當被加密的部份要存入硬碟時,自動加密回去 (org-crypt-use-before-save-magic) ;; 設定要加密的 tag 標籤為 secret (setq org-crypt-tag-matcher "secret") ;; 避免 secret 這個 tag 被子項目繼承 造成重複加密 ;; (但是子項目還是會被加密喔) (setq org-tags-exclude-from-inheritance (quote ("secret"))) ;; 用於加密的 GPG 金鑰 ;; 可以設定任何 ID 或是設成 nil 來使用對稱式加密 (symmetric encryption) (setq org-crypt-key nil)
配置說明
當被加密的部份要存入硬碟時,自動加密回去
由於 org-mode 為純文字檔案,如果你的 emacs 有打開檔案備份,則當 emacs 進 行備份的時候,加密的區域並未被加密回去的話,這樣加密就沒有意義了。
;; 當被加密的部份要存入硬碟時,自動加密回去 (org-crypt-use-before-save-magic)
這個設定就是告訴 emacs 說,當檔案存到硬碟的時候,要將該加密的區域加密回去再 進行儲存,這樣就算你有備份文件,也不用擔心文件會因為備份的關係,而 洩漏了加密部份的資訊。
設定要加密的 tag 標籤
在 org-mode 裏面,針對會自動進行加密的區域皆是使用 tags 來進行辨認,在 這邊我設定加密用的 tag 為
secret
,這樣當 org-mode 看到目前的項目 tag 為secret
時,會自動針對他進行加密的動作。;; 設定要加密的 tag 標籤為 secret (setq org-crypt-tag-matcher "secret")
避免加密用的 tag 被子項目繼承
因為加密的動作是對整個 entry 進行運作,所以這個設定的目的,是必免子 項目繼承了 tag,倒致重複進行加密。
;; 避免 secret 這個 tag 被子項目繼承 ;; (但是子項目還是會被加密喔) (setq org-tags-exclude-from-inheritance (quote ("secret")))
加密用的金鑰
若您對使用 GPG 進行加密很熟悉,這個變數是用來設定你的 GPG Key ID ,如果不知道 GPG Key 是什麼,就設定為 nil 。這樣子當你進行加/解密 的動作時,emacs 會詢問你密碼。
;; 用於加密的 GPG 金鑰 ;; 可以設定任何 ID 或是設成 nil 來使用對稱式加密 (symmetric encryption) (setq org-crypt-key nil)
在 org-mode 裡面進行加/解密
加密某個項目
如果你是按照上面的設定的話,你只要對一個項目設定他的 TAGS 為 secret ,這樣在進行儲存檔案的情況下,emacs 就會自動幫你進行加密了。
你可以將游標移動到你要加密的項目上,並使用 C-c C-C ,會看到你的項目 變成下面這個樣子
* 這個項目要被加密 :secret:
接著對你的文件進行存檔,就會看到該項目的內容被加密了。
解密某個項目
如果某天你想要觀看被加密的項目,你將游標移動到該項目上,並在你的 emacs 中,輸入
M-x org-decrpt-entry
這樣就可以解密了。 (當然存檔時還是會被加密)
移除加密設定
移除加密的設定非常簡單,你只需要將
secret
這個 TAGS 拿掉就好了,這 樣該項目就不會在儲存時被加密。