首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php解密存在“解密失败”

php解密存在“解密失败”
EN

Stack Overflow用户
提问于 2018-06-19 10:59:02
回答 1查看 1.7K关注 0票数 1

我尝试用php gnupg加密和解密字符串。加密效果很好。它可以通过外壳解密。

当我尝试用gnupg_decrypt解密字符串时,它终止于一个简单的“解密失败”。

我尝试用不同的方法重新生成密钥,但是结果是一样的。

代码似乎只导入公钥,但私钥没有导入。

  • PHP-版本: 7.2.5
  • GPGme版本: 1.10.0
  • 扩展版本: 1.4.0
  • gpg (GnuPG) 2.2.4 --libgcrypt 1.8.1

我怎么能解密这段文字?

折叠代码用于解密消息:

代码语言:javascript
复制
// initialize PGP
putenv("GNUPGHOME=".__DIR__."/.gnupg");
$oPgp = new gnupg();
var_dump($oPgp->keyinfo(''));

// get encrypted Message
$sEncryptedText = file_get_contents(__DIR__.'/msg.txt');

// import Key
$mInfo = $oPgp->import($sPrivateKey);

// show infos
echo "<br><br> Private-Key: <br> ";
var_dump($mInfo);

echo "<br><br>was Key added?<br>";
var_dump($oPgp->adddecryptkey($mInfo['fingerprint'], 'here is the correct password'));

echo 'Decrypted:<br>';
var_dump( $oPgp->decrypt($sEncryptedText));

echo 'Errors:<br>';
var_dump($oPgp->geterror());

$oPgp->cleardecryptkeys();

var_dump($oPgp->keyinfo(''));

输出是发光:

代码语言:javascript
复制
/var/www/html/encrypt_test/encrypt.php:73: array (size=0)
empty


Private-Key: 
/var/www/html/encrypt_test/encrypt.php:83:
array (size=9)
  'imported' => int 1
  'unchanged' => int 0
  'newuserids' => int 0
  'newsubkeys' => int 0
  'secretimported' => int 1
  'secretunchanged' => int 0
  'newsignatures' => int 0
  'skippedkeys' => int 0
  'fingerprint' => string 'fingerprint1' (length=40)


was Key added?
/var/www/html/encrypt_test/encrypt.php:86:boolean true
Decrypted:
/var/www/html/encrypt_test/encrypt.php:89:boolean false
Errors:
/var/www/html/encrypt_test/encrypt.php:92:string 'decrypt failed' (length=14)
/var/www/html/encrypt_test/encrypt.php:96:
array (size=1)
  0 => 
    array (size=8)
      'disabled' => boolean false
      'expired' => boolean false
      'revoked' => boolean false
      'is_secret' => boolean false
      'can_sign' => boolean true
      'can_encrypt' => boolean true
      'uids' => 
        array (size=1)
          0 => 
            array (size=6)
              'name' => string 'name' (length=x)
              'comment' => string 'comment' (length=x)
              'email' => string 'email' (length=x)
              'uid' => string 'uid' (length=x)
              'revoked' => boolean false
              'invalid' => boolean false
      'subkeys' => 
        array (size=2)
          0 => 
            array (size=11)
              'fingerprint' => string 'fingerprint1' (length=X)
              'keyid' => string 'id1' (length=X)
              'timestamp' => int 1234
              'expires' => int 0
              'is_secret' => boolean false
              'invalid' => boolean false
              'can_encrypt' => boolean false
              'can_sign' => boolean true
              'disabled' => boolean false
              'expired' => boolean false
              'revoked' => boolean false
          1 => 
            array (size=11)
              'fingerprint' => string 'fingerprint2' (length=x)
              'keyid' => string 'keyid2' (length=x)
              'timestamp' => int 1234
              'expires' => int 0
              'is_secret' => boolean false
              'invalid' => boolean false
              'can_encrypt' => boolean true
              'can_sign' => boolean false
              'disabled' => boolean false
              'expired' => boolean false
              'revoked' => boolean false
EN

回答 1

Stack Overflow用户

发布于 2018-07-26 07:46:31

我已经得到了解决方案:在GPG版本> 2.0.0中,您不能将密码传递给私钥。这是受限制的,是出于安全原因。密码不应传递给程序可读。

它可以通过两种方式加以修正:

一种方法是使用没有密码的密钥。然后,您可以使用没有密码的方法。

另一种方法是允许无人参与的处理。您可以看到这里如何做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50926762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档