700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php中rsa加密及解密和签名及验签

php中rsa加密及解密和签名及验签

时间:2020-09-07 10:54:20

相关推荐

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为真时签验通过,假时未通过

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。