// -----------創建公鑰和私鑰
$ 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($驗證);