RSA验证

// -----------创建公钥和私钥

$ 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($验证);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值