问题标签 [gpgme]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1689 浏览

php - PHP gnupg enrypt 可以工作,但不能解密

我即将使用gnupg加密和解密文件。奇怪的是,加密工作正常,但解密总是返回 false。

这是一个加密和解密内容的简单 php 脚本:

版本

Debian 软件包

gpgv 1.4.18-7

libgpgme11:amd64 1.5.1-6

pecl

包版本状态 gnupg 1.4.0 stable

PHP版本: PHP 7.1.11-1+0~20171027135825.10+jessie~1.gbp2e638d

有人已经遇到过这个问题吗?我没主意了。先感谢您。

0 投票
1 回答
820 浏览

ruby - 如何使用 Ruby 使用 GPG 在 S3 中流式传输和解密大文件

我正在处理 S3 中需要解密并保存回 S3 的非常大的文件。我们的磁盘空间和内存有限,因此流媒体是我们的最佳选择。

我正在使用ruby​​-gpgme gem。

这是我到目前为止所拥有的:

这成功地解密并写入了第一个块,但在处理下一个块之前解密失败。

我假设这是因为第一个块没有正确终止,并且 .decrypt 没有连续地从流本身读取。

关于如何将块作为流传递来解密的任何想法?

0 投票
1 回答
211 浏览

c - 如何抑制来自 gpgme 的 valgrind 警告?

我试图在我的代码中使用 GPGME 来验证一些签名。然而,简单地初始化和释放 GPGME 上下文会导致 valgrind 发出大量警告。

例如:

编译它gcc -lgpgme -lassuan -lgpg-error main.c,然后在 valgrind 下运行它。从valgrind -v ./a.out开始,这段代码似乎启动了 6 个不同的进程。我已经复制了相关的警告信息:

总共为 6 个不同的进程重复了完全相同的一组警告。似乎 GPGME 试图关闭一些不属于自己的文件描述符。

我的问题是双重的:

  1. 我使用 gpgme API 错了吗?还有什么我需要做的吗?
  2. 如果 API 的使用是正确的,我该如何抑制来自 valgrind 的这些警告?

我似乎无法让 valgrind 对这些警告产生抑制作用。运行valgrind --gen-suppressions=all -v ./a.out不会在输出中显示任何抑制。我想这是因为这些是警告而不是真正的错误。我尝试自己写一个抑制,但我不确定应该是什么类型。通常,当我不得不写抑制时,它们是为了Memcheck:Leak. 但是这些警告属于哪一类呢?

编辑:这是我尝试写的一个抑制:

编辑 2:我试图提供赏金,但它已过期。如果你对此有一个有效的答案,我提供 100 代表的赏金。

0 投票
0 回答
480 浏览

ruby - GPG 从流中解密块

我正在尝试将几个大型对称加密的 .csv.gpg(每个 40GB+)文件从 S3 流式传输到 gnupg 到输出流。

我想使用流分块处理文件,这样我们就不需要将整个加密/解密文件下载到磁盘或内存中。

这是一个使用AWS Ruby S3 SDK下载对象块并将它们传递给 gnupg 进行解密的示例,使用 Ruby 2.5.0 和ruby​​-gpgme gem

运行此程序时,我在 STDOUT 中看到有效的解密 CSV 数据(好!),直到它在第一个块的末尾失败:

~/.rvm/gems/ruby-2.5.0/gems/gpgme-2.0.14/lib/gpgme/ctx.rb:435:in `decrypt_verify': 解密失败 (GPGME::Error::DecryptFailed)

这就是我卡住的地方。

  • gnupg 可以一次解密块还是必须在写入输出之前读取整个文件?
  • 块是否需要具有一定的大小和/或以某种方式分隔?

任何反馈将不胜感激。

0 投票
1 回答
2663 浏览

php - PHP Gnupg 没有在 phpinfo() 中显示为扩展,我不能在 php 中使用它

我使用自制软件安装了 gnupg 和 gpgme。我还链接了两者,并通过运行 brew gnupg install 和 brew gpgme install 确保它们已安装和链接,并收到确认安装和版本的消息。

我已将 gnupg.so 文件放在扩展路径中,并将 extension=gnupg.so 添加到 php.ini 文件中。

我从 infophp 页面获得了扩展路径和特定的 php.ini 路径。重新启动 mamp 后,我仍然看不到 gnupg 或 gpgme 作为 phpinfo 的扩展,我也不能在我的 php 代码中使用 gnupg。
使用$gpg = new \gnupg();它会给我错误说 gnupg 类不存在。

我尝试了另一种方法:我还从他们的网站手动下载了 gnupg 和 gpgme 提取它们运行如下

。/配置,

制作,

须藤使安装,

并且能够再次成功安装,还确保 gnupg.so 位于 phpinfo 页面中显示的扩展路径相同的路径中,并且还添加extension=gnupg.so到 phpinfo 页面中显示的相同 php.ini 中(我添加了 extension=gnupg .so 在 php.ini 文件中的所有其他扩展名之后)

我在用:

mac os 高山脉 10.13.3

php 7.1.12

地图 4.4.1

gnupg 2.2.5(我用 brew install 试过这个版本)

gnupg 1.4.0(我试过这个版本,从 gnupg.org 下载)

gpgme 1.10.0

我也想知道,在希望解决上述问题之后,我是否需要在我的 php 文件中包含任何内容才能使用 gnupg?

gnupg 和 gpgme 有什么区别?为了加密php中的文件,我需要两者吗?

如果我无法解决此问题,还有什么方法可以加密 xml 文件或包含文本数据的文件?我需要将文件和 FTP 加密到另一台服务器并在那里解密。

预先感谢大家的帮助

0 投票
1 回答
1751 浏览

c++ - 如何使用 C++ GPGME 导入 GPG 密钥和解密文件

如何使用 GPGME C++ 库简单地加载 gpg 密钥以导入上下文?

我正在尝试构建一个使用 GPGME 解密文件的应用程序,但我很难理解 GPU 文档。我试图在网上搜索示例,但尚未遇到加载预先存在的 GPG 密钥的示例。我所做的尝试包括尝试创建一个上下文并加载一个预先存在的密钥,该密钥将用于根据示例代码解密文件。

我不断收到“无效输入”作为响应错误,不知道为什么。我已经包含了删除了输出语句的代码,但是注释了它们的输出返回。

更新:修复上下文后,解密输出成功,尽管文件未正确解密并且似乎未成功添加密钥。我在下面提供了修改后的代码。

任何输入都非常感谢,在此先感谢!

0 投票
0 回答
91 浏览

haskell - Haskell GPGME 的签名速度比 GPG 慢得多

我的程序使用 GPG 对文件进行签名。我在 Haskell 中使用GPGME,问题是它比从命令行使用 GPG 慢大约 16 倍。这是一个例子:

哈斯克尔代码:

我生成了一个 10MB 的垃圾文件

我从命令行用 GPG 签名:

并得到

我用我的 Haskell 程序签名

并得到

我尝试使用分析再次运行 Haskell 代码并得到以下结果:

我查看了花费时间的newCtx函数,但我不清楚是什么花费了这么多。

0 投票
4 回答
893 浏览

python - 如何在基于 gpgme 的 Python 脚本中防止密码缓存?

以下简短的 Python 脚本采用三个命令行参数:密码、输入路径和输出路径。然后它使用密码短语解密输入路径的内容,并将解密的内容放入输出路径。

只要提供了正确的密码,此解密就可以正常工作,但显然会导致缓存此类正确的密码,因此任何后续解密尝试都会成功,而与提供的密码无关。(我在这篇文章的末尾给出了我的意思的更完整的说明,以及版本细节。)

显然,正在进行一些密码缓存,但我并不真正了解细节。

我想知道的是:如何修改 Python 脚本以禁用密码短语的缓存?请注意,我对如何在脚本之外禁用密码缓存不感兴趣!我希望脚本自动禁用密码缓存。那可能吗?


这是我上面提到的详细示例。该脚本./demo.py是我上面列出的来源。重要提示:下面给出的代码仅在我从命令行执行时才显示。如果我将它放在一个文件中并作为脚本执行(或获取它),那么所有使用错误密码的解密都会失败,无论之前是否使用正确的密码成功解密。

0 投票
0 回答
72 浏览

ruby-on-rails - 解析解密的 PGP 电子邮件

我对使用 PGP 加密的解密电子邮件内容有疑问。当我使用 mail-gpg (或任何其他 gem)解密邮件时,结果不是邮件对象;它只是电子邮件的来源,类似于下面的结构。

我尝试使用邮件 gem 和另一个名为 mail_parser 的 gem,但它们都不能解析这个源。

以下是解密源的示例:

0 投票
1 回答
147 浏览

python - 如何在`pygpgme`中启用密码回调(而不是提示)?

我正在编写软件来检索加密文件,解密它们并定期使用其中包含的信息填充 AWS S3 上的数据湖。这些文件使用 GPG 密钥加密,我们使用pygpgme( https://launchpad.net/pygpgme ) 包进行加密。我在 Mac 上,我安装了 GPG 2.2.16 和pygpgme0.3。

我们用来解密文件的私钥有一个密码。

我尝试了多种在网上找到的技术/建议,包括:

无禁用提示。

这是我用于分配密码回调的代码:

这是我的gpg.conf

尽管如此,每次我运行该服务时,都会在命令行中提示输入密码。如何让软件使用我提供的回调?