шифрование — php gnupg расшифровывается с «расшифровывать не удалось»;

Я пытаюсь зашифровать и расшифровать строку с помощью php gnupg. Шифрование работает хорошо. Это может быть расшифровано через оболочку.

Когда я пытаюсь расшифровать строку с помощью gnupg_decrypt, она заканчивается простым «сбой расшифровки».

Я пытался восстановить ключи разными способами, но результат тот же.

Кажется, код импортирует только открытый ключ, но закрытый ключ не импортируется.

  • PHP-версия: 7.2.5
  • Версия GPGme: 1.10.0
  • Версия расширения: 1.4.0
  • gpg (GnuPG) 2.2.4
    —libgcrypt 1.8.1

Как я могу расшифровать текст?

Следующий код используется для расшифровки сообщения:

// 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(''));

Вывод следующий:

/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

1

Решение

У меня есть решение:
В версии GPG> 2.0.0 вы не можете передать пароль на закрытый ключ. Это ограничено из соображений безопасности. Пароль не должен передаваться читабельной программе.

Это можно исправить двумя способами:

Одним из способов является использование ключа без пароля. Затем вы можете использовать метод без пароля.

Другой способ — разрешить автоматическую обработку. Ты можешь видеть Вот как это сделать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]