Я создал открытый ключ и закрытый ключ с OpenPGP-PHP, затем я импортировал их как в GnuPG, который не будет импортировать открытый ключ без указания флаг «-allow-non-self -igned-uid». Затем, когда я пытаюсь расшифровать файл, я получаю следующее:Невозможно дешифровать файл, зашифрованный с помощью openpgp-php в gnupg
gpg --decrypt test.tif.asc
Generated: Thu, 25 Feb 2016 11:12:28 -0500
gpg: unknown armor header:
By: <>
gpg: unknown armor header:
Using: OpenPGP for PHP
gpg: unknown armor header:
For: TEST
gpg: unknown armor header:
gpg: encrypted with 512-bit RSA key, ID 519A1973, created 2016-02-25
"TEST"
gpg: public key decryption failed: Wrong secret key used
gpg: decryption failed: No secret key
Но ключ явно существует:
gpg --list-secret-keys
/home/mike/.gnupg/secring.gpg
-----------------------------
sec 512R/519A1973 2016-02-25
uid TEST
сгенерировать их с кодом PHP:
$header = array(
'Generated' => date("r"),
'By' => "Test <[email protected]>",
'Using' => "OpenPGP for PHP",
'For' => "TEST"
);
$rsa = new Crypt_RSA();
$k = $rsa->createKey(512);
$rsa->loadKey($k['privatekey']);
$nkey = new OpenPGP_SecretKeyPacket(array(
'n' => $rsa->modulus->toBytes(),
'e' => $rsa->publicExponent->toBytes(),
'd' => $rsa->exponent->toBytes(),
'p' => $rsa->primes[1]->toBytes(),
'q' => $rsa->primes[2]->toBytes(),
'u' => $rsa->coefficients[2]->toBytes()
));
$uid = new OpenPGP_UserIDPacket("TEST");
$wkey = new OpenPGP_Crypt_RSA ($nkey);
$m = $wkey->sign_key_userid(array($nkey, $uid));
// Serialize private key
$private_bytes = $m->to_bytes();
$private_bytes = OpenPGP::enarmor($private_bytes, "PGP PRIVATE KEY BLOCK", $header);
// Serialize public key message
$pubm = clone($m);
$pubm[0] = new OpenPGP_PublicKeyPacket($pubm[0]);
$public_bytes = OpenPGP::enarmor($public_bytes, "PGP PUBLIC KEY BLOCK", $header);
И шифрование с использованием:
$pgp_header = array(
'Generated' => date("r"),
'By' => "Test <[email protected]>",
'Using' => "OpenPGP for PHP",
'For' => "TEST"
);
// Unarmor the public key for encrypting
$public_bytes = OpenPGP_Message::parse(OpenPGP::unarmor($public_bytes, "PGP PUBLIC KEY BLOCK"));
echo encryptData(file_get_contents("test.tif"), "test.tif", $public_bytes, $pgp_header);
function encryptData($data, $filename, $key, $header)
{
$data = new OpenPGP_LiteralDataPacket($data, array('format' => 'u', 'filename' => $filename));
$encrypted = OpenPGP_Crypt_Symmetric::encrypt($key, new OpenPGP_Message(array($data)));
return(OpenPGP::enarmor($encrypted->to_bytes(), "PGP MESSAGE", $header));
}
Но это Кажется, я определенно чего-то не хватает. Как я могу заставить GnuPG успешно расшифровать мои материалы?
«' $ RSA = новый Crypt_RSA();.. $ к = $ rsa-> createKey (512); '« Блокирует ли размеры ключей RSA <2048 бит? »(должно быть.) –
@ScottArciszewski поднял его до 2048 и все еще получал ту же ошибку! Я сохраню его в 2048, хотя. –
- $ public_bytes va определяется? 'OpenPGP :: unarmor ($ public_bytes,' –