// -----------创建公钥和私钥
$ config = array(
//“digest_alg”=>“sha512”,
“private_key_bits”=> 512,//字节数512 1024 2048 4096等
“private_key_type”=> OPENSSL_KEYTYPE_RSA,//加密类型
);
//创建公钥和私钥返回资源
$ res = openssl_pkey_new($ config);
//从得到的资源中获取私钥并把私钥赋给$ <span style =“font-family:Arial,Helvetica,sans-serif;”> privKey </ span>
openssl_pkey_export($ res,$ privKey);
// <span style =“font-family:Arial,Helvetica,sans-serif;”>从得到的资源中获取公钥</ span> <span style =“font-family:Arial,Helvetica,sans-serif; “> $ pubKey </ span> <span style =”font-family:Arial,Helvetica,sans-serif;“>
echo'</ span>'; $ pubKey = openssl_pkey_get_details($ res);
$ pubKey = $ pubKey [“key”];
//后续代码的var_dump($的的privKey);
//后续代码var_dump($ PUBKEY);
的var_dump(阵列('的privKey'=> $的privKey,'PUBKEY'=> $ PUBKEY));
// ------------------------------
注:窗下需开启PHP扩展php_opensll
Linux的的下默认开启
// --------------验证类创建-----------------
class Rsa
{
/ **
* RSA签名
* @参数$ data
签名数据* @param $ private_key_path商户私钥文件路径
*返回
签名结果
* / 函数rsaSign($ data,$ private_key_path){
$ priKey = file_get_contents($ private_key_path );
$ res = openssl_get_privatekey($ priKey);
openssl_sign($ data,$ sign,$ res);
openssl_free_key($水库);
// base64编码
$ sign = base64_encode($ sign);
返回$符号;
}
/ **
* RSA签名
* @param $ data待
签名数据* @param $ ali_public_key_path支付宝的公钥文件路径
* @param $ sign要校对的签名结果
*返回验证结果
* /
函数rsaVerify($ data,$ ali_public_key_path,$ sign){
$ pubKey = file_get_contents($ ali_public_key_path);
$ res = openssl_get_publickey($ pubKey);
$ result =(bool)openssl_verify($ data,base64_decode($ sign),$ res);
openssl_free_key($水库);
返回$ result;
}
函数rsaEncrypt($ content,$ public_key_path){
$ pubKey = file_get_contents($ public_key_path);
$ res = openssl_get_publickey($ pubKey);
//把需要加密的内容,按128位拆开解密
$ result ='';
for($ i = 0; $ i <strlen($ content)/ 128; $ i ++){
$ data = substr($ content,$ i * 128,128);
openssl_public_encrypt($ data,$ encrypt,$ res);
$ result。= $ encrypt;
}
$ result = base64_encode($ result);
openssl_free_key($水库);
返回$ result;
}
/ **
* RSA解密
* @param $内容需要解密的内容,密文
* @param $ private_key_path商户私钥文件路径
*返回解密后内容,明文
* /
函数rsaDecrypt($ content,$ private_key_path){
$ priKey = file_get_contents($ private_key_path);
$ res = openssl_get_privatekey($ priKey);
//用的base64将内容还原成二进制
$ content = base64_decode($ content);
//把需要解密的内容,按128位拆开解密
$ result ='';
for($ i = 0; $ i <strlen($ content)/ 128; $ i ++){
$ data = substr($ content,$ i * 128,128);
openssl_private_decrypt($ data,$ decrypt,$ res);
$ result。= $ decrypt;
}
openssl_free_key($水库);
返回$ result;
}
}
// -------------------调用验证类------------------------ -
require_once“Rsa.php”;
标题(“内容类型:文本/ HTML;字符集='UTF-8”);
定义(“PRIVATE_KEY”,“./ private_key.pem”);
定义(“PUBLIC_KEY”,“。 / pub_key.pem“);
$ rsa = new Rsa();
$ msg =”我的爱是巧合。“;
// RSA加密演示
$ encrypt = $ rsa-> rsaEncrypt($ msg,PUBLIC_KEY);
echo“<p> Tom使用Bob的公钥加密之后的数据为:<br/> $ encrypt <br/> </ p> <hr />”;
// RSA解密演示
$ decrypt = $ rsa-> rsaDecrypt($ encrypt,PRIVATE_KEY);
echo“<p> Bob得到了上述加密数据,使用自己的私钥解密后的结果为:<br/> $ decrypt </ p> <hr />”;
// RSA生成数字签名演示
$ sign = $ rsa-> rsaSign($ msg,PRIVATE_KEY);
echo“Bob在传输数据时,使用自己的私钥生成的数字签名为:$ sign </ p> <hr />”;
// RSA验证数字签名演示
$ verify = $ rsa-> rsaVerify($ msg,PUBLIC_KEY,$ sign);
echo“Tom使用Bob的公钥验证的结果为:</ p>”;
后续代码var_dump($验证);