//by www.qzphp.cn
//非对称加密函数
function myrsa($string='', $key = '', $action="EN",$sign=''){
if($action =='KEY'){
$config = array(
"digest_alg" => "sha512",
"private_key_bits" => 2048, //字节数512 1024 2048 4096 等 ,不能加引号,此处长度与加密的字符串长度有关系
"private_key_type" => OPENSSL_KEYTYPE_RSA, //加密类型
);
$res = openssl_pkey_new($config);
openssl_pkey_export($res, $private_key);
$public_key = openssl_pkey_get_details($res);
$public_key = $public_key["key"];
$data = array(
'public_key'=> $public_key,
'private_key'=> $private_key,
);
return $data;
}elseif($action == 'EN'){
//$key = public_key
openssl_public_encrypt($string, $encrypted, $key);
return base64_encode($encrypted);
}elseif($action == 'DE'){
//$key = private_key
openssl_private_decrypt(base64_decode($string), $decrypted, $key);
return $decrypted;
}elseif($action == 'SIGN'){
//$key = private_key
openssl_sign($string, $signature, $key, OPENSSL_ALGO_SHA256);
return base64_encode($signature);
}elseif($action == 'VERIFY'){
//$key = public_key
$result = openssl_verify($string, base64_decode($sign), $key, OPENSSL_ALGO_SHA256);
return $result;//1成功,0失败
}
}