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為真時簽驗通過,假時未通過


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM