php 生成加密公钥加密私钥实例详解
php生成加密公钥加密私钥实例详解
生成公钥私钥 win下必须要openssl.cof支持 liunx一般已自带安装
$config=array(
//"digest_alg"=>"sha512",
"private_key_bits"=>512,//字节数512102420484096等
"private_key_type"=>OPENSSL_KEYTYPE_RSA,//加密类型
);
//1.创建公钥和私钥返回资源
$res=openssl_pkey_new($config);
//从得到的资源中获取私钥并把私钥赋给$privKey
openssl_pkey_export($res,$privKey);
//从得到的资源中获取私钥并把私钥赋给$pubKey
$pubKey=openssl_pkey_get_details($res);
$pubKey=$pubKey["key"];
var_dump(array('privKey'=>$privKey,'pubKey'=>$pubKey));
die;
//2.加密解密数据要加密的数据
$data='plaintextdatagoeshere';
//对$data进行加密要加密的数据字符串得到加密后的数据加密所需要的公钥
openssl_public_encrypt($data,$encrypted,$pubKey);
echobase64_encode($encrypted);
//对加密后的数据进行解密解密的数据得到解密后的数据解密所需要的私钥
$decrypted=base64_decode($encrypted);
openssl_private_decrypt($encrypted,$decrypted,$privKey);
echo$decrypted;
//3.一个加密解密类
classrsa{
private$public_key='';//公密钥
private$private_key='';//私密钥
private$public_key_resource='';//公密钥资源
private$private_key_resource='';//私密钥资源
/**
*架构函数
*@param[string]$public_key_file[公密钥文件地址]
*@param[string]$private_key_file[私密钥文件地址]
*/
publicfunction__construct($public_key,$private_key){
$this->public_key=$public_key;
$this->private_key=$private_key;
if(false==($this->public_key_resource=$this->is_bad_public_key($this->public_key))||false==($this->private_key_resource=$this->is_bad_private_key($this->private_key))){
thrownewException('publickeyorprivatekeynousable');
}
}
privatefunctionis_bad_public_key($public_key){
returnopenssl_pkey_get_public($public_key);
}
privatefunctionis_bad_private_key($private_key){
returnopenssl_pkey_get_private($private_key);
}
/**
*生成一对公私密钥成功返回公私密钥数组失败返回false
*/
publicfunctioncreate_key(){
$res=openssl_pkey_new();
if($res==false)returnfalse;
openssl_pkey_export($res,$private_key);
$public_key=openssl_pkey_get_details($res);
returnarray('public_key'=>$public_key["key"],'private_key'=>$private_key);
}
/**
*用私密钥加密
*/
publicfunctionprivate_encrypt($input){
openssl_private_encrypt($input,$output,$this->private_key_resource);
returnbase64_encode($output);
}
/**
*解密私密钥加密后的密文
*/
publicfunctionpublic_decrypt($input){
openssl_public_decrypt(base64_decode($input),$output,$this->public_key_resource);
return$output;
}
/**
*用公密钥加密
*/
publicfunctionpublic_encrypt($input){
openssl_public_encrypt($input,$output,$this->public_key_resource);
returnbase64_encode($output);
}
/**
*解密公密钥加密后的密文
*/
publicfunctionprivate_decrypt($input){
openssl_private_decrypt(base64_decode($input),$output,$this->private_key_resource);
return$output;
}
}
$private_key='-----BEGINRSAPRIVATEKEY-----
MIICXQIBAAKBgQC3//sR2tXw0wrC2DySx8vNGlqt3Y7ldU9+LBLI6e1KS5lfc5jl
TGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2klBd6h4wrbbHA2XE1sq21ykja/
Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o2n1vP1D+tD3amHsK7QIDAQAB
AoGBAKH14bMitESqD4PYwODWmy7rrrvyFPEnJJTECLjvKB7IkrVxVDkp1XiJnGKH
2h5syHQ5qslPSGYJ1M/XkDnGINwaLVHVD3BoKKgKg1bZn7ao5pXT+herqxaVwWs6
ga63yVSIC8jcODxiuvxJnUMQRLaqoF6aUb/2VWc2T5MDmxLhAkEA3pwGpvXgLiWL
3h7QLYZLrLrbFRuRN4CYl4UYaAKokkAvZly04Glle8ycgOc2DzL4eiL4l/+x/gaq
deJU/cHLRQJBANOZY0mEoVkwhU4bScSdnfM6usQowYBEwHYYh/OTv1a3SqcCE1f+
qbAclCqeNiHajCcDmgYJ53LfIgyv0wCS54kCQAXaPkaHclRkQlAdqUV5IWYyJ25f
oiq+Y8SgCCs73qixrU1YpJy9yKA/meG9smsl4Oh9IOIGI+zUygh9YdSmEq0CQQC2
4G3IP2G3lNDRdZIm5NZ7PfnmyRabxk/UgVUWdk47IwTZHFkdhxKfC8QepUhBsAHL
QjifGXY4eJKUBm3FpDGJAkAFwUxYssiJjvrHwnHFbg0rFkvvY63OSmnRxiL4X6EY
yI9lblCsyfpl25l7l5zmJrAHn45zAiOoBrWqpM5edu7c
-----ENDRSAPRIVATEKEY-----';
$public_key='-----BEGINPUBLICKEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3//sR2tXw0wrC2DySx8vNGlqt
3Y7ldU9+LBLI6e1KS5lfc5jlTGF7KBTSkCHBM3ouEHWqp1ZJ85iJe59aF5gIB2kl
Bd6h4wrbbHA2XE1sq21ykja/Gqx7/IRia3zQfxGv/qEkyGOx+XALVoOlZqDwh76o
2n1vP1D+tD3amHsK7QIDAQAB
-----ENDPUBLICKEY-----';
$rsa=newrsa($public_key,$private_key);
$str='加密解密';
$str=$rsa->public_encrypt($str);//用公密钥加密
echo$str,'';
$str=$rsa->private_decrypt($str);//用私密钥解密
echo$str,'';
//=============================================================
$str=$rsa->private_encrypt($str);//用私密钥加密
echo$str,'';
$str=$rsa->public_decrypt($str);//用公密钥解密
echo$str,'';
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!