Search code examples
phpgnupgopenpgp

How do you use the PHP OpenPGP library?


There is a PHP extension port of the gnupg PGP library. However, I'm having a hard time finding examples that explain how to use the library.

How do you properly create keys for application users, and then use them to encrypt/decrypt text using the GnuPG library?


Solution

  • See this URL it is very help full to you. Download example and try it.

    https://github.com/singpolyma/openpgp-php

    Or Try it:-

    You can download lib/openpgp.php and lib/openpgp_crypt_rsa.php files in above the URL.

    examples/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 <test@example.com>');
    
    $wkey = new OpenPGP_Crypt_RSA($nkey);
    $m = $wkey->sign_key_userid(array($nkey, $uid));
    
    print $m->to_bytes();
    

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

    examples/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));
    
    ?>