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-library
RETepa
RET应该返回类似:
库是文件 /usr/local/share/emacs/24.2.50/lisp/epa.elc
如果没有,那么您必须安装它。 (或升级到Emacs23或Emacs24)
然后,使用 检查变量的值auto-mode-alist
并
C-hvauto-mode-alist
RET搜索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”绑定此变量,但不要全局设置它。