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($驗證);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章