GenKey.class.php
<?php
class GenKey
{
var $dn;
var $privkeypass;
var $numberofdays;
var $opensslPath;
var $config;
var $privkey;
var $crs;
var $sscert;
function GenKey($OrgName , $commonName , $OrgEmail , $opensslPath){
$this->dn = array(
“countryName” => “CN”,
“stateOrProvinceName” => “SHANGHAI”,
“localityName” => “PUDONG”,
“organizationName” => $OrgName,
“organizationalUnitName” => $OrgName,
“commonName” => $commonName,
“emailAddress” => $OrgEmail
);
$this->config = array(“config” => $opensslPath);
$this->privkey = openssl_pkey_new($this->config);
$this->csr = openssl_csr_new($this->dn, $this->privkey,$this->config);
$this->sscert = openssl_csr_sign($this->csr, null, $this->privkey, $this->numberofdays,$this->config);
}
function genPubKey(){
openssl_x509_export($this->sscert, $publickeytext);
return $publickeytext;
}
function genPriKey(){
openssl_pkey_export($this->privkey, $privatekeytext, $this->privkeypass,$this->config);
return $privatekeytext;
}
function genPubKeyToFile($savePath){
$this->mkdirs(dirname($savePath));
return openssl_x509_export_to_file($this->sscert, $savePath);
}
function genPriKeyToFile($savePath){
$this->mkdirs(dirname($savePath));
return openssl_pkey_export_to_file($this->privkey, $savePath,null,$this->config);
}
function mkdirs($path)
{
//#如果已经是目录,直接退出
if( is_dir($path) ) return;
else
{
//#构建上级文件夹
mkdirs(dirname($path));
//#构建当前文件夹
@mkdir($path,0777) or die(“目录$path无法创建!”);
@chmod($cd,0777);
}
}
}
<?
//使用用例
$opensslPath = “D:wwwincopenssl.cnf”;
$genkey = new GenKey(“juujo” , “khalid” , “5061*****@qq.com” , $opensslPath);
//var_dump($genkey->genPubKey());
//echo “<hr>”;
//var_dump($genkey->genPriKey());
//echo “<hr>”;
var_dump($genkey->genPriKeyToFile(“d:/tmp/pri.key.pem”));
var_dump($genkey->genPubKeyToFile(“d:/tmp/pub.key.pem”));
?>
Sign.fun.php
<?php
function sign($dataString , $key_content){
$pkeyid = openssl_get_privatekey($key_content);
$signature =””;
openssl_sign($dataString, $signature, $pkeyid);
// free the key from memory
openssl_free_key($pkeyid);
return base64_encode($signature);
}
function verify($dataString,$signString,$key_content){
$pubkeyid = openssl_get_publickey($key_content);
$signature =base64_decode($signString);
$flg = openssl_verify($dataString, $signature, $pubkeyid );
// free the key from memory
openssl_free_key($pubkeyid);
return $flg;
}
/**
*加密
*/
function encodeing($sourcestr , $key_content){
$pubkeyid = openssl_get_publickey($key_content);
if(openssl_public_encrypt($sourcestr,$crypttext,$pubkeyid)){
return base64_encode(“”.$crypttext);
}
}
/**
*解密
*/
function decodeing($crypttext , $key_content){
$prikeyid = openssl_get_privatekey($key_content);
$crypttext = base64_decode($crypttext);
if(openssl_private_decrypt($crypttext,$sourcestr,$prikeyid)){
return “”.$sourcestr;
}
return “==”;
}
?>
<?
//使用用例
$txt=”abcd12345ABCD”;
$txtcry= encodeing($txt , ‘—–BEGIN CERTIFICATE—–
MIIDfTCCAuagAwIBAgIBADANBgkqhkiG9w0BAQQFADCBjDELMAkGA1UEBhMCQ04x
EjAQBgNVBAgTCUdVQU5HRE9ORzEQMA4GA1UEBxMHU0hBTlRPVTERMA8GA1UEChQI
1qe4tsa9zKgxETAPBgNVBAsUCNanuLbGvcyoMQ0wCwYDVQQDFATCrL+tMSIwIAYJ
KoZIhvcNAQkBFhMxMzUwOTg4OTc5MEAxMzkuY29tMB4XDTA5MDQwNzA2MDkwNloX
DTA5MDQwNzA2MDkwNlowgYwxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHVUFOR0RP
TkcxEDAOBgNVBAcTB1NIQU5UT1UxETAPBgNVBAoUCNanuLbGvcyoMREwDwYDVQQL
FAjWp7i2xr3MqDENMAsGA1UEAxQEwqy/rTEiMCAGCSqGSIb3DQEJARYTMTM1MDk4
ODk3OTBAMTM5LmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA9AwJo5mg
+JPv6NuoEP1G9jClLqgqVT6/kqD3l8h6yaeAbQjZXiUr1Oa8emPbrWdewP0CA3Xw
9aPcAsSFtn4cTFIw+sl2FDdB8G7xgOW14i3pxjvEQZnernpXv3l5ZV5w9YAhgmba
BK6k55eK2lD62o+40WOppUcVDZBo4c4ZmU8CAwEAAaOB7DCB6TAdBgNVHQ4EFgQU
cJtY2d9xOmaiig8zrgs5b+AkKH0wgbkGA1UdIwSBsTCBroAUcJtY2d9xOmaiig8z
rgs5b+AkKH2hgZKkgY8wgYwxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHVUFOR0RP
TkcxEDAOBgNVBAcTB1NIQU5UT1UxETAPBgNVBAoUCNanuLbGvcyoMREwDwYDVQQL
FAjWp7i2xr3MqDENMAsGA1UEAxQEwqy/rTEiMCAGCSqGSIb3DQEJARYTMTM1MDk4
ODk3OTBAMTM5LmNvbYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GB
AGzWRPnyuQrhL/JvjwrLUkJsMNC4/mPmqvwwqpYxnFMuBzkDBnW2KroRaqITeQc7
B4xI3Uxzhvsbo/W14XXkPlubJ0BqUSuT+invNSdK63mFNfv5VEI1P8icpl/rzWje
NDWjIVIqsT5hxL00qTPi9gAdkW4tgkmcwgU08NF6nCKi
—–END CERTIFICATE—–‘);
echo “原文:”.$txt;
echo “<hr>”;
echo “加密:”.($txtcry);
echo “<hr>”;
echo “还原:”.decodeing($txtcry , ‘—–BEGIN RSA PRIVATE KEY—–
MIICWgIBAAKBgQD0DAmjmaD4k+/o26gQ/Ub2MKUuqCpVPr+SoPeXyHrJp4BtCNle
JSvU5rx6Y9utZ17A/QIDdfD1o9wCxIW2fhxMUjD6yXYUN0HwbvGA5bXiLenGO8RB
md6uele/eXllXnD1gCGCZtoErqTnl4raUPraj7jRY6mlRxUNkGjhzhmZTwIDAQAB
AoGANTWesGXhm/EdYMbrqPCgFTNcAIU33ag1urGP6i8S3n6/2IYSZp1yJhQ8ye6V
ygP8u9UuKDUB2XzljlDs2nI6lthfDKQ9Lfz3WChu4cCa/RKZUG+1xLzqPPn22W8u
aSOrLvkK1hX9yZdAOiubmMve1yk6MWl5RR0g4Xmuqlf+XzkCQQD9kUUWI1Vd1qR+
AQy1HCDZMA/deAcy8LrdTnw5swK1GkX6H+m/vYSFgkl1+s04ghB5MxosuP/yxA6Y
7Rt358ptAkEA9mNjA3bS8sOepRUtl7F2s2dn/GbX1aZqWzLNbwow9h7LZYKfyVCk
sML+PB5CmhmHtVuxBY04VwWTxBSPl4VdKwJANgoSrjAjjlcjQVNZ8PMosQDEMM/W
wO169ZU3dliHOC98QF0yxNFP/+APZdxohiV5+0p/xo46xfMwpTjLBNfaVQJARdF1
/kZOkoJCU09EAydDlqTnv4s5AA7PNpaXxi5iH2wsgNBaDQbwFDK9LjX484fmf8rC
x+rzmx02eSrGYc5lzwI/bzEwZj8on3282ddFW4XOYulSV8OMSNZHrWmJ55CxqIfH
5PYt4KIEzl6qi1Y+3ZNQp15E67zUTgyBFyoOXiSP
—–END RSA PRIVATE KEY—–‘);
$signdate = sign($txt , ‘—–BEGIN RSA PRIVATE KEY—–
MIICWgIBAAKBgQD0DAmjmaD4k+/o26gQ/Ub2MKUuqCpVPr+SoPeXyHrJp4BtCNle
JSvU5rx6Y9utZ17A/QIDdfD1o9wCxIW2fhxMUjD6yXYUN0HwbvGA5bXiLenGO8RB
md6uele/eXllXnD1gCGCZtoErqTnl4raUPraj7jRY6mlRxUNkGjhzhmZTwIDAQAB
AoGANTWesGXhm/EdYMbrqPCgFTNcAIU33ag1urGP6i8S3n6/2IYSZp1yJhQ8ye6V
ygP8u9UuKDUB2XzljlDs2nI6lthfDKQ9Lfz3WChu4cCa/RKZUG+1xLzqPPn22W8u
aSOrLvkK1hX9yZdAOiubmMve1yk6MWl5RR0g4Xmuqlf+XzkCQQD9kUUWI1Vd1qR+
AQy1HCDZMA/deAcy8LrdTnw5swK1GkX6H+m/vYSFgkl1+s04ghB5MxosuP/yxA6Y
7Rt358ptAkEA9mNjA3bS8sOepRUtl7F2s2dn/GbX1aZqWzLNbwow9h7LZYKfyVCk
sML+PB5CmhmHtVuxBY04VwWTxBSPl4VdKwJANgoSrjAjjlcjQVNZ8PMosQDEMM/W
wO169ZU3dliHOC98QF0yxNFP/+APZdxohiV5+0p/xo46xfMwpTjLBNfaVQJARdF1
/kZOkoJCU09EAydDlqTnv4s5AA7PNpaXxi5iH2wsgNBaDQbwFDK9LjX484fmf8rC
x+rzmx02eSrGYc5lzwI/bzEwZj8on3282ddFW4XOYulSV8OMSNZHrWmJ55CxqIfH
5PYt4KIEzl6qi1Y+3ZNQp15E67zUTgyBFyoOXiSP
—–END RSA PRIVATE KEY—–‘);
echo $signdate;
echo “<hr>”;
$flag = verify($txt , $signdate , ‘—–BEGIN CERTIFICATE—–
MIIDfTCCAuagAwIBAgIBADANBgkqhkiG9w0BAQQFADCBjDELMAkGA1UEBhMCQ04x
EjAQBgNVBAgTCUdVQU5HRE9ORzEQMA4GA1UEBxMHU0hBTlRPVTERMA8GA1UEChQI
1qe4tsa9zKgxETAPBgNVBAsUCNanuLbGvcyoMQ0wCwYDVQQDFATCrL+tMSIwIAYJ
KoZIhvcNAQkBFhMxMzUwOTg4OTc5MEAxMzkuY29tMB4XDTA5MDQwNzA2MDkwNloX
DTA5MDQwNzA2MDkwNlowgYwxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHVUFOR0RP
TkcxEDAOBgNVBAcTB1NIQU5UT1UxETAPBgNVBAoUCNanuLbGvcyoMREwDwYDVQQL
FAjWp7i2xr3MqDENMAsGA1UEAxQEwqy/rTEiMCAGCSqGSIb3DQEJARYTMTM1MDk4
ODk3OTBAMTM5LmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA9AwJo5mg
+JPv6NuoEP1G9jClLqgqVT6/kqD3l8h6yaeAbQjZXiUr1Oa8emPbrWdewP0CA3Xw
9aPcAsSFtn4cTFIw+sl2FDdB8G7xgOW14i3pxjvEQZnernpXv3l5ZV5w9YAhgmba
BK6k55eK2lD62o+40WOppUcVDZBo4c4ZmU8CAwEAAaOB7DCB6TAdBgNVHQ4EFgQU
cJtY2d9xOmaiig8zrgs5b+AkKH0wgbkGA1UdIwSBsTCBroAUcJtY2d9xOmaiig8z
rgs5b+AkKH2hgZKkgY8wgYwxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHVUFOR0RP
TkcxEDAOBgNVBAcTB1NIQU5UT1UxETAPBgNVBAoUCNanuLbGvcyoMREwDwYDVQQL
FAjWp7i2xr3MqDENMAsGA1UEAxQEwqy/rTEiMCAGCSqGSIb3DQEJARYTMTM1MDk4
ODk3OTBAMTM5LmNvbYIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GB
AGzWRPnyuQrhL/JvjwrLUkJsMNC4/mPmqvwwqpYxnFMuBzkDBnW2KroRaqITeQc7
B4xI3Uxzhvsbo/W14XXkPlubJ0BqUSuT+invNSdK63mFNfv5VEI1P8icpl/rzWje
NDWjIVIqsT5hxL00qTPi9gAdkW4tgkmcwgU08NF6nCKi
—–END CERTIFICATE—–‘);
echo $flag;
echo “<hr>”;
?>