php中rsa加密及解密和签名及验签
加密的內(nèi)容長(zhǎng)度限制為密鑰長(zhǎng)度少11位,如128位的密鑰最多加密的內(nèi)容為117個(gè)長(zhǎng)度。
公鑰加密
$public_content=file_get_contents(公鑰路徑);
$public_key=openssl_get_publickey($public_content);
$original_str='待加密的內(nèi)容';
$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));//最終網(wǎng)絡(luò)傳的密文
私鑰解密
$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為最后解密出來(lái)的。
注:私鑰加密及公鑰解密同理。
-----------------------------------------------------------------------------------------------------------------------
私鑰簽名
$private_content=file_get_contents(私鑰路徑);
$private_key=openssl_get_privatekey($private_content);
$original_str='';//原數(shù)據(jù)
openssl_sign($original_str,$sign,$private_key);
openssl_free_key($private_key);
$sign=base64_encode($sign);//最終的簽名
公鑰驗(yàn)簽
$public_content=file_get_contents(公鑰路徑);
$public_key=openssl_get_publickey($public_content);
$sign=base64_decode($sign)'';//得到的簽名
$original_str='';得到的數(shù)據(jù)
$result=(bool)openssl_verify($original_str,$sign,$public_key);
openssl_free_key($public_key);
$result為真時(shí)簽驗(yàn)通過(guò),假時(shí)未通過(guò)
轉(zhuǎn)載于:https://www.cnblogs.com/bwteacher/p/5757361.html
總結(jié)
以上是生活随笔為你收集整理的php中rsa加密及解密和签名及验签的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 结构化查询语言包含哪些方面?
- 下一篇: 动态规划算法php,php算法学习之动态