加密的内容长度限制为密钥长度少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为真时签验通过,假时未通过