• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

RSA加密传输(php)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

RSA加密传输:

  对于初接触RSA加密的童鞋来说,很可能会被绕进去。最近写了一个RSA加密传输的需求,总结一下。希望能对你有点帮助。

  首先要明白以下几点:

    1:公钥和私钥一定是成对的才可以

    2:私钥是保密的,公钥是公开的

    3:公钥和私钥,可以互为加密和解密

    4:用其中一个密钥加密数据,则只有对应的那个密钥才能解开

 

主要有两种用法

  1:公钥加密

    A传输数据给B

      (1),A用公钥加密数据,传输给B

      (2),B用私钥解密

  2:公钥认证

    A传输数据给B

      (1),A用私钥加密数据(也就是私钥签名),传输给B

      (2),B用公钥解密(也就是验签)

 

 

示例:证书,公钥认证的过程

签名:

    /**
    signing  签名 password   私钥证书需要密码
     */
    public function get_signing_str($data){
        //$data=$this->get_request_string();
        $certs=array();
       // dump(file_get_contents(ROOT_PATH."public/static/"."private_key.pfx"));
        openssl_pkcs12_read(file_get_contents(ROOT_PATH."public/static/"."private_key.pfx"), $certs, "password");
        if(!$certs) return;
        $signature = \'\';
        openssl_sign($data, $signature, $certs[\'pkey\'],\'sha256\');
        //dump(base64_encode($signature));
        return base64_encode($signature);
    }

验签:

public function verify_signing($rest){
        $rest=json_decode($rest,true);
        $sign=$rest[\'sign\'];
        $sign = base64_decode($sign);//签名参数
        unset($rest[\'sign\']);
        unset($rest[\'sign_type\']);
        $verifystr=$this->get_request_str($rest);//验签明文字符串
        $pkeyid = openssl_pkey_get_public(file_get_contents(ROOT_PATH."public/static/"."public_key.cer"));
        $verify = openssl_verify($verifystr,$sign,$pkeyid,\'sha256\'); //验签  (明文/签名/key)
       // $msg = openssl_error_string();
       // dump($msg);
       // dump($verify);
        openssl_free_key($pkeyid);
        if($verify==1){
            echo \'验签通过\';
           // $data=json_encode($rest);
           // return $data;
        }else{
            return \'验签失败\';
        }
    }

 

 

RSA加密过程

        $privateKeyStr=file_get_contents(ROOT_PATH."public/static/"."pkcs1_key.pem");
        $pi_key=openssl_pkey_get_private($privateKeyStr);      
        $encryptSign="";
        openssl_private_encrypt($sign_str,$encryptSign,$pi_key);  //(待加密字符串/加密后的字符串/key)

 

SHA加密过程

$sign  = hash(\'sha256\',$source);  //(算法/待加密字符串)

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php 递归数据,三维数组转换二维发布时间:2022-07-10
下一篇:
paip.分布式应用系统java c#.net php的建设方案发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap