note 77439 added to ref.openssl
| From: | mattalexx at gmail dot com | Date: | Wed, 29 Aug 2007 21:16:52 +0000 |
| Subject: | note 77439 added to ref.openssl | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-129887@lists.php.net to get a copy of this message | ||
Use this for simple public/private key encryption.
<?php
/**
* Point to your config file
*
*/
define("OPEN_SSL_CONF_PATH", "/usr/share/ssl/openssl.cnf");
/**
* Length of time certificate is valid (in days)
*
*/
define("OPEN_SSL_CERT_DAYS_VALID", 365);
/**
* Passphrase required with private key
*
*/
define("OPEN_SSL_PASSPHRASE",
"lkdfjbjeyrasdfvkajwdeblsolkdkdjfbvzslalsmdbfvksb");
/**
* Enter description here...
*
*/
define("OPEN_SSL_PUBKEY_PATH", "/docs/domains/mywebsite.com/docs/key.pem"); //
Public key path
/**
* A wrapper class for a simple subset of the PHP OpenSSL functions. Use for public key encryption
jobs.
*
* <code>
*
* // To configure
* // 1. Set OPEN_SSL_CONF_PATH to the path of your openssl.cnf file.
* // 2. Set OPEN_SSL_PASSPHRASE to any passphrase.
* // 3. Use the OpenSSL::do_csr method to generate your private and public keys (see next section).
* // 4. Save the private key somewhere offline and save your public key somewhere on this machine.
* // 5. Set OPEN_SSL_PUBKEY_PATH to the public key's path.
*
* // To generate keys
* $ossl = new OpenSSL;
* $ossl->do_csr();
* $privatekey = $ossl->privatekey;
* $publickey = $ossl->publickey;
* unset($ossl);
*
* // Encrypt
* $text = "Secret text";
* $ossl = new OpenSSL;
* $ossl->encrypt($text);
* $encrypted_text = $ossl->crypttext;
* $ekey = $ossl->ekey;
* unset($ossl);
*
* // Decrypt
* $ossl = new OpenSSL;
* $decrypted_text = $ossl->decrypt($encrypted_text, $privatekey, $ekey);
* unset($ossl);
*
* @author Matt Alexander (mattalexx@gmail.com) [based on code by Alex Poole (php@wwwcrm.com)]
* @copyright 2007
*
*/
class OpenSSL {
public $privatekey;
public $publickey;
public $csr;
public $crypttext;
public $ekey;
public function encrypt($plain) {
// Turn public key into resource
$publickey = openssl_get_publickey(is_file(OPEN_SSL_PUBKEY_PATH)?
file_get_contents(OPEN_SSL_PUBKEY_PATH) : OPEN_SSL_PUBKEY_PATH);
// Encrypt
openssl_seal($plain, $crypttext, $ekey, array($publickey));
openssl_free_key($publickey);
// Set values
$this->crypttext = $crypttext;
$this->ekey = $ekey[0];
}
public function decrypt($crypt, $privatekey, $ekey="") {
// Turn private key into resource
$privatekey = openssl_get_privatekey((is_file($privatekey)? file_get_contents($privatekey) :
$privatekey), OPEN_SSL_PASSPHRASE);
// Decrypt
openssl_open($crypt, $plaintext, $ekey, $privatekey);
openssl_free_key($privatekey);
// Return value
return $plaintext;
}
public function do_csr(
$countryName = "UK",
$stateOrProvinceName = "London",
$localityName = "Blah",
$organizationName = "Blah1",
$organizationalUnitName = "Blah2",
$commonName = "Joe Bloggs",
$emailAddress = "openssl@domain.com"
) {
$dn = array(
"countryName" => $countryName,
"stateOrProvinceName" => $stateOrProvinceName,
"localityName" => $localityName,
"organizationName" => $organizationName,
"organizationalUnitName" => $organizationalUnitName,
"commonName" => $commonName,
"emailAddress" => $emailAddress
);
$config = array(
"config" => OPEN_SSL_CONF_PATH
);
$privkey = openssl_pkey_new();
$csr = openssl_csr_new($dn, $privkey, $config);
$sscert = openssl_csr_sign($csr, null, $privkey, OPEN_SSL_CERT_DAYS_VALID, $config);
openssl_x509_export($sscert, $this->publickey);
openssl_pkey_export($privkey, $this->privatekey, OPEN_SSL_PASSPHRASE, $config);
openssl_csr_export($csr, $this->csr);
}
}
?>
----
Server IP: 209.41.74.194
Probable Submitter: 209.188.114.2
----
Manual Page -- http://www.php.net/manual/en/ref.openssl.php
Edit -- https://master.php.net/note/edit/77439
Del: integrated -- https://master.php.net/note/delete/77439/integrated
Del: useless -- https://master.php.net/note/delete/77439/useless
Del: bad code -- https://master.php.net/note/delete/77439/bad+code
Del: spam -- https://master.php.net/note/delete/77439/spam
Del: non-english -- https://master.php.net/note/delete/77439/non-english
Del: in docs -- https://master.php.net/note/delete/77439/in+docs
Del: other reasons-- https://master.php.net/note/delete/77439
Reject -- https://master.php.net/note/reject/77439
Search -- https://master.php.net/manage/user-notes.php