zoukankan      html  css  js  c++  java
  • php中rsa加密及解密和签名及验签

    加密的内容长度限制为密钥长度少11位,如128位的密钥最多加密的内容为117个长度。

      公钥加密
        $public_content=file_get_contents(公钥路径);
        $public_key=openssl_get_publickey($public_content);
        
        $original_str='待加密的内容';
        $original_arr=str_split($original_str,117);  //折分
        foreach($original_arr as $o)
        {
          $sub_enc=null;
          openssl_public_encrypt($o,$sub_enc,$public_key);
          $original_enc_arr[]=$sub_enc;
        }
        openssl_free_key($public_key);
        $original_enc_str=base64_encode(implode('',$original_enc_arr));//最终网络传的密文
      私钥解密
        $private_content=file_get_contents(私钥路径);
        $private_key=openssl_get_privatekey($private_content);

        $original_enc_str=base64_decode(密文);
        $orig_dec_str='';
        for($i=0;$i<strlen($original_enc_str)/128;$i++)
        {
           $data=substr($original_enc_str,$i*128,128);
           openssl_private_decrypt($data,$decrypt,$private_key);
           $orig_dec_str.=$decrypt;
        }
        $orig_dec_str为最后解密出来的。

      注:私钥加密及公钥解密同理。
    -----------------------------------------------------------------------------------------------------------------------
      私钥签名
        $private_content=file_get_contents(私钥路径);
        $private_key=openssl_get_privatekey($private_content);

        $original_str='';//原数据
        openssl_sign($original_str,$sign,$private_key);
        openssl_free_key($private_key);
        $sign=base64_encode($sign);//最终的签名    

      公钥验签
        $public_content=file_get_contents(公钥路径);
        $public_key=openssl_get_publickey($public_content);

        $sign=base64_decode($sign)'';//得到的签名
        $original_str='';得到的数据
        $result=(bool)openssl_verify($original_str,$sign,$public_key);
        openssl_free_key($public_key);
        $result为真时签验通过,假时未通过

  • 相关阅读:
    Azure 2 月新公布
    协合新能源康大海:我们每多发一度电,就为蓝天白云多贡献了一份力量
    Azure:陪伴你们,是我最长情的告白
    微软加速器上海首期启航,拓展云端智慧创新
    Azure杯年会Cosplay大赛,速来围观!
    Azure 1 月新公布
    Azure进阶攻略 | VS2015和Azure,想要在一起其实很容易
    Azure进阶攻略丨如何驾驭罢工的Linux虚机网卡?
    Azure 12 月新公布
    利用枚举找到列表中重复元素的索引
  • 原文地址:https://www.cnblogs.com/baocheng/p/6071302.html
Copyright © 2011-2022 走看看