如何使用Emacs识别并自动打开ASCII装甲格式的GPG加密文件?

如何使用Emacs识别并自动打开ASCII装甲格式的GPG加密文件?

gpg -ca passwords.txt创建加密的 ASCII 文件passwords.txt.asc。 Emacs 将文件作为普通文本文件打开:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v2.0.19 (GNU/Linux)

jA0EAwMCkIp3+bQkLWJgyTQYLGVN8EUEG0BE42sEj/8PrnSzgviSiENxtK+/2n73
WXD7EtndVS/MX4lFJ96h8VozChUA
=zSwh
-----END PGP MESSAGE-----

如何让 Emacs 在打开和保存文件时自动解密和加密文件?

答案1

使用默认配置一切都应该正常工作,但您可以检查您的配置。

首先,您需要确保已安装 EasyPG Assistant。

M-xlocate-libraryRETepaRET应该返回类似:

库是文件 /usr/local/share/emacs/24.2.50/lisp/epa.elc

如果没有,那么您必须安装它。 (或升级到Emacs23或Emacs24)

  1. http://emacswiki.org/emacs/EasyPG
  2. http://epg.sourceforge.jp/

然后,使用 检查变量的值auto-mode-alistC-hvauto-mode-alistRET搜索epa

如果您找不到它,请将此片段添加到您的.emacs.

(add-to-list 'auto-mode-alist '("\\.gpg\\(~\\|\\.~[0-9]+~\\)?\\'" nil epa-file))

答案2

我遇到了与原始海报相同的问题。我希望 EasyPG 以 ASCII 装甲密文而不是二进制形式保存扩展名为 .asc 的文件。回复中有一些很好的信息,但没有一个足够完整来解决OP的问题。我想我通过以下配置解决了这个问题。

(epa-file-enable)

(setq epa-file-name-regexp "\\.\\(gpg\\|\\asc\\)\\(~\\|\\.~[0-9]+~\\)?\\'")
(epa-file-name-regexp-update)

;; Minor mode for ASCII-armored gpg-encrypted files
(define-minor-mode auto-encryption-armored-mode
  "Save files in encrypted, ASCII-armored format"
  ;; The initial value.
  nil
  ;; The indicator for the mode line.
  " Encrypted,Armored"
  ;; The minor mode bindings.
  nil
  (if (symbol-value auto-encryption-armored-mode)
      (set (make-local-variable 'epa-armor) t)
    (kill-local-variable 'epa-armor))
  )

(add-to-list 'auto-mode-alist '("\\.asc$" . auto-encryption-armored-mode))

首先,这会将 .asc 和 Emacs 备份名称添加到文件扩展名中,EasyPG 将保存为加密数据(默认为二进制)。

然后它定义了一个次要模式,将 epa-armor 设置为缓冲区局部变量。受到敏感模式的启发:http://anirudhsasikumar.net/blog/2005.01.21.html

最后,它将次要模式设置为在打开 .asc 文件时自动激活。 TODO:打开 Emacs 备份文件时也激活。

请注意,如果您不希望 .gpg 和 .asc 文件的明文副本作为 Emacs 备份四处浮动,那么“额外”的 epa-file-name-regexp 正则表达式语法至关重要。

到目前为止似乎工作正常。

这个问题相当陈旧,但 Debian 8.3 上的 EasyPG 和 Emacs 24 也没有一个简单的解决方案。希望有帮助。

答案3

我做了以下让Emacs以与文件.asc相同的方式打开文件.gpg

(require 'epa-file)
(epa-file-enable)
(setq epa-file-name-regexp "\\.\\(gpg\\|asc\\)$")
(epa-file-name-regexp-update)

答案4

2015 年英国夏令时 9 月 3 日星期四 01:31:53

除了上面的(使用ascii装甲自动加密.asc文件)之外,epa-armor应该是非零:

添加到init.el: (setq epa-armor t)

epa-armor 是 `epa.el' 中定义的变量,其值为 t 如果非 nil,epa 命令将创建 ASCII 装甲输出。

您应该使用“let”绑定此变量,但不要全局设置它。

相关内容