- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 php GnuPG 函数使用私钥解密 gpg 文件。但是,当尝试解密时,它看起来像 php 只是挂起或永远完成。我正在尝试解密一个包含一句话的简单测试文件。
我可以离线解密文件(例如使用 GNU Privacy Assistant)。
我想我已经设置好了权限-
-bash-4.1$ gpgconf --list-dirs
/home/jdoe/.gnupg/gpg.conf, perms: 0770
/home/jdoe/.gnupg/pubring.gpg~, perms: 0770
/home/jdoe/.gnupg/secring.gpg, perms: 0660
/home/jdoe/.gnupg/private-keys-v1.d, perms: 0700
/home/jdoe/.gnupg/random_seed, perms: 0600
/home/jdoe/.gnupg/pubring.gpg, perms: 0770
/home/jdoe/.gnupg/trustdb.gpg, perms: 0770
但是,如果我将一个新文件写入“/home/jdoe/.gnupg/”,它会提供 644 权限(不确定这是否重要)。
/home/jdoe/.gnupg/xxxtest.txt.gpg, perms: 0644
我(认为)我已经成功导入了私钥。 KeyInfo 如下。相关 key 的指纹和 key ID 为 888(我已将其实际值替换为 888)。我包括了所有相关的 key (我已将不相关的指纹/ key 信息替换为 777)。
$info = $gpg->keyinfo(''); echo 'Key info:' . print_r($info, true);
Array ( [0] => Array ( [disabled] => [expired] => [revoked] => [is_secret] => [can_sign] => 1 [can_encrypt] => 1 [uids] => Array ( [0] => Array ( [name] => ApacheTest [comment] => Testing [email] => apache@localhost [uid] => ApacheTest (Testing) [revoked] => [invalid] => ) ) [subkeys] => Array ( [0] => Array ( [fingerprint] => 777 [keyid] => 777 [timestamp] => 1203433839 [expires] => 0 [is_secret] => [invalid] => [can_encrypt] => [can_sign] => 1 [disabled] => [expired] => [revoked] => ) [1] => Array ( [fingerprint] => 777 [keyid] => 777 [timestamp] => 1203433840 [expires] => 0 [is_secret] => [invalid] => [can_encrypt] => 1 [can_sign] => [disabled] => [expired] => [revoked] => ) ) ) [1] => Array ( [disabled] => [expired] => [revoked] => [is_secret] => [can_sign] => 1 [can_encrypt] => 1 [uids] => Array ( [0] => Array ( [name] => John Doe [comment] => [email] => john.doe@example.com [uid] => John Doe [revoked] => [invalid] => ) ) [subkeys] => Array ( [0] => Array ( [fingerprint] => 888 [keyid] => 888 [timestamp] => 1224013510 [expires] => 0 [is_secret] => [invalid] => [can_encrypt] => [can_sign] => 1 [disabled] => [expired] => [revoked] => ) [1] => Array ( [fingerprint] => 777 [keyid] => 777 [timestamp] => 1224013510 [expires] => 0 [is_secret] => [invalid] => [can_encrypt] => 1 [can_sign] => [disabled] => [expired] => [revoked] => ) ) ) )
我的问题是,当尝试使用下面的代码解密时,它看起来像 php 只是挂起或永远完成(实际上超过了 max_execution_time,但没有显示有关它的错误消息)。
$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
putenv("GNUPGHOME=/home/jdoe/.gnupg");
$encryptedContent = file_get_contents($filePathAndName);
$pw = [];
$fingerprint = [];
if($gpg->adddecryptkey($recipient, $pw)) {
echo "Add decrypt key returned true.";
} else {
echo "Could not add decrypt key. GPG error: " . $gpg -> geterror();
}
//I know we get to this spot
try {
$plaintext = $gpg->decrypt($encryptedContent);
echo '<pre>' . $plaintext . '</pre>';
} catch (Exception $e) {
die('ERROR: ' . $e->getMessage());
}
关于为什么这不起作用的任何想法?非常感谢。
==============ls -la/home/jdoe/.gnupg 的输出
drwxrwx--- 3 jdoe apache 4096 Mar 31 23:45 .
drwxr-xr-x 19 jdoe root 12288 Apr 1 09:39 ..
-rwxrwx--- 1 jdoe apache 9188 Mar 28 15:36 gpg.conf
drwx------ 2 apache apache 4096 Mar 31 21:26 private-keys-v1.d
-rwxrwx--- 1 apache apache 2479 Mar 31 21:26 pubring.gpg
-rwxrwx--- 1 apache apache 913 Mar 31 20:28 pubring.gpg~
-rw------- 1 apache apache 600 Mar 31 20:32 random_seed
-rw-rw---- 1 jdoe apache 1978 Mar 28 21:05 secring.gpg
-rwxrwx--- 1 apache apache 10 Mar 31 20:28 test.txt
-rwxrwx--- 1 jdoe apache 1200 Mar 31 20:28 trustdb.gpg
-rw-r--r-- 1 apache apache 347 Mar 31 23:30 xxxtest.txt.gpg
能否从命令行解密文件,需要多长时间?
Will get back to you with this information (working with an SA on this, I only have ftp access to the machine).
试试增加PHP的错误报告?
Already done... it just spins (which I assume means it times out, out exit_on_timeout is off). I've tried it with a 10 minute and 30 second timeout. Result is the same. The test file we are decrypting is less than 100 characters.
您可能想尝试不设置主目录,而是使用 import($keydata) 导入 key
Same result
尝试设置不同的主目录?
I created /home/jdoe/.gnupg/temp, chmod permissions to 777. I set this as a home directory for gpg. I attempted to import the private key. But, $gpg->keyinfo('') returns nothing. This time when trying to $gpg->adddecryptkey, it fails with this error - "Uncaught exception 'Exception' with message 'get_key failed'".
谢谢
最佳答案
如果有人仍然面临这个问题(就像我一样),请阅读:
As of gnupg version 2, it is not possible to pass a plain password any more. The parameter is simply ignored. Instead, a pinentry application will be launched in case of php running in cli mode. In cgi or apache mode, opening the key will fail. The simplest solution is to use keys without passwords.
来自:http://php.net/manual/en/function.gnupg-decrypt.php
我通过 cron 运行的 php 脚本总是无法解密,直到我删除密码。我尝试使用不带密码的 key ,它对我来说效果很好。
干杯!
关于php GnuPG解密超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22778844/
wait() 和 wait(timeout) 之间有什么区别。无论如何 wait() 需要等待通知调用,但为什么我们有 wait(timeout)? 那么 sleep(timeout) 和 wait(
如何向以下脚本添加超时?我希望它将文本显示为“超时”。 var bustcachevar = 1 //bust potential caching of external pages after in
我正在使用 Firebase once() 方法来检索 React Native 移动应用中的值。问题是,如果手机离线,once() 永远不会返回。文档说 ref.off() 方法应该取消回调,但这似
我在一个表中有一个大型数据集(超过 200 万行,每行超过 100 列),存储在 cassandra 中,几个月前(也许是 2 个月?)我能够执行一个简单的命令来跟踪该表中的记录数量: SELECT
我使用 jquery 开发移动应用程序,下面是我的代码,当我向包含的页面添加 5 或 6 行时,一切正常。但如果我添加多行显示错误消息:Javascript 执行超时。 function succes
我正在使用一个 javascript 确认,它将在 15 分钟后重复调用。如果用户未选择确认框中的任何选项我会在等待 1 分钟后重定向他。如何实现这一目标?我的代码是这样的 var timeo
每次我在沙箱环境中运行这段代码时,我都会超时并最终崩溃。我已经通过多个 IDE 运行它,但仍然找不到任何语法错误。如果有人看到了我没有看到的东西,我将非常感谢您的意见。 //assign variab
更新联系人后我会显示一条消息,1500 毫秒后我会转到另一个页面。我是这样做的: onSubmit() { if (this.form.valid) {
从昨天开始,我拼命尝试使用最新版本的 PHPMailer 运行一个非常简单的电子邮件脚本。 最荒谬的是,同一个脚本在两台服务器上不起作用,但在另一台服务器上却起作用。 这是我的尝试(来自 PHPMai
我已阅读以下 2 篇文章并尝试实现相同的文章。 我的代码是这样的,超时发生在这里 HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
我正在尝试连接到 wsdl 服务, 但收到此错误: wsdl 错误:获取 http://api.didww.com/api/?wsdl - HTTP 错误: header 的套接字读取超时 本地没有问
我在使用 Ansible 的 CentOs7 实例上从 Artifactory 下载 jar 文件时遇到问题。这是我第一次在 Linux 实例上这样做。 我在每个 Windows 实例上都使用了 wi
在过去的两天里,我一直在寻找原因,我在互联网上和堆栈上尝试了很多解决方案。 我有一个带有 ubuntu 16.04 和 apache2 的专用 VM -> 服务器版本:Apache/2.4.18 (U
我正处于构建 PHP 应用程序的早期阶段,其中一部分涉及使用 file_get_contents()从远程服务器获取大文件并将它们传输给用户。例如,要获取的目标文件是 200 mB。 如果下载到服务器
我正在尝试连接到本地网络内的路由器。到目前为止,我已经使用了 TcpClient。 检查我的代码: public static void RouterConnect() {
我正在尝试构建一段代码来搜索使用 Mechanize 和 Ruby 超时的页面。我的测试台包括一个专门写入超时的页面,以及 3 个正常运行的页面。这是代码: urls = ['http://examp
我是 python 的新手,也是语义网查询领域的新手。我正在使用 SPARQLWrapper 库查询 dbpedia,我搜索了库文档但未能找到从 sparqlWrapper 触发到 dbpedia 的
我正在从 GenServer 中的句柄信息功能调用 elixir genserver 以添加电话号码获取表单客户端。但是一旦调用了handle_call,所有者进程就会崩溃[超时]。请帮忙。 全局创建
假设我的 WCF 服务中有以下执行链: ServiceMethod 调用并等待 Method1,然后调用并等待 Method2,后者调用并等待 Method3。最后 ServiceMethod 在返回
目前我正在开发一个从远程服务器发送和接收文件的应用程序。为了进行网络操作,我正在使用 QNetworkAccessManager。 要上传文件,我使用 QNetworkAccessManager::p
我是一名优秀的程序员,十分优秀!