RSA 加密傳輸 (php)

來源:互聯網
上載者:User

標籤:pat   err   文字   需要   signature   turn   ext   ase   error   

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);  //(演算法/待加密字串)

 

RSA 加密傳輸 (php)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.