php - mail - pgp libre
¿Cómo se utiliza la biblioteca PHP OpenPGP? (2)
Son muy buenos ejemplos basados en el puerto de extensión de PHP que usted solicitó y veremos algunos ejemplos.
Usando GnuPG con PHP - Tutoriales completos
Ejemplo
Obtención de información clave
putenv(''GNUPGHOME=/home/sender/.gnupg'');
// create new GnuPG object
$gpg = new gnupg();
// throw exception if error occurs
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
// get list of keys containing string ''example''
try {
$keys = $gpg->keyinfo(''example'');
print_r($info);
} catch (Exception $e) {
echo ''ERROR: '' . $e->getMessage();
}
Cifrar un correo simple
// set path to keyring directory
// set path to keyring directory
putenv(''GNUPGHOME=/home/sender/.gnupg'');
// create new GnuPG object
$gpg = new gnupg();
// throw exception if error occurs
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
// recipient''s email address
$recipient = ''[email protected]'';
// plaintext message
$plaintext =
"Dear Dave,/n
The answer is 42./n
John";
// find key matching email address
// encrypt plaintext message
// display and also write to file
try {
$gpg->addencryptkey($recipient);
$ciphertext = $gpg->encrypt($plaintext);
echo ''<pre>'' . $ciphertext . ''</pre>'';
file_put_contents(''/tmp/ciphertext.gpg'', $ciphertext);
} catch (Exception $e) {
die(''ERROR: '' . $e->getMessage());
}
Descifrado el correo
// set path to keyring directory
putenv(''GNUPGHOME=/home/recipient/.gnupg'');
// create new GnuPG object
$gpg = new gnupg();
// throw exception if error occurs
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
// recipient''s email address
$recipient = ''[email protected]'';
// ciphertext message
$ciphertext = file_get_contents(''/tmp/ciphertext.gpg'');
// register secret key by providing passphrase
// decrypt ciphertext with secret key
// display plaintext message
try {
$gpg->adddecryptkey($recipient, ''guessme'');
$plaintext = $gpg->decrypt($ciphertext);
echo ''<pre>'' . $plaintext . ''</pre>'';
} catch (Exception $e) {
die(''ERROR: '' . $e->getMessage());
}
También deberías mirar el ejemplo.
Hay un puerto de extensión PHP de la biblioteca PGP gnupg . Sin embargo, me cuesta mucho encontrar ejemplos que expliquen cómo usar la biblioteca.
¿Cómo crea correctamente las claves para los usuarios de la aplicación y luego las usa para cifrar / descifrar texto usando la biblioteca GnuPG?
Ver esta URL es una gran ayuda para usted. Descarga el ejemplo y pruébalo.
https://github.com/singpolyma/openpgp-php
O inténtalo: -
Puede descargar los archivos lib / openpgp.php y lib / openpgp_crypt_rsa.php en la URL superior.
ejemplos / keygen.php
<?php
require dirname(__FILE__).''/../lib/openpgp.php'';
require dirname(__FILE__).''/../lib/openpgp_crypt_rsa.php'';
$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 <[email protected]>'');
$wkey = new OpenPGP_Crypt_RSA($nkey);
$m = $wkey->sign_key_userid(array($nkey, $uid));
print $m->to_bytes();
ejemplos / sign.php
<?php
require dirname(__FILE__).''/../lib/openpgp.php'';
require dirname(__FILE__).''/../lib/openpgp_crypt_rsa.php'';
/* Parse secret key from STDIN, the key must not be password protected */
$wkey = OpenPGP_Message::parse(file_get_contents(''php://stdin''));
$wkey = $wkey[0];
/* Create a new literal data packet */
$data = new OpenPGP_LiteralDataPacket(''This is text.'', array(''format'' => ''u'', ''filename'' => ''stuff.txt''));
/* Create a signer from the key */
$sign = new OpenPGP_Crypt_RSA($wkey);
/* The message is the signed data packet */
$m = $sign->sign($data);
/* Output the raw message bytes to STDOUT */
echo $m->to_bytes();
?>
ejemplos / verify.php
<?php
require dirname(__FILE__).''/../lib/openpgp.php'';
require dirname(__FILE__).''/../lib/openpgp_crypt_rsa.php'';
/* Parse public key from STDIN */
$wkey = OpenPGP_Message::parse(file_get_contents(''php://stdin''));
$wkey = $wkey[0];
/* Parse signed message from file named "t" */
$m = OpenPGP_Message::parse(file_get_contents(''t''));
/* Create a verifier for the key */
$verify = new OpenPGP_Crypt_RSA($wkey);
/* Dump verification information to STDOUT */
var_dump($verify->verify($m));
?>