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

//公私钥分割
function getPublicKey($certificate)
{
$publicKeyString = "-----BEGIN PUBLIC KEY-----\n" .
wordwrap($certificate, 64, "\n", true) .
"\n-----END PUBLIC KEY-----";
return $publicKeyString;
}
function getPrivateKey($certificate)
{
$privateKeyString = "-----BEGIN RSA PRIVATE KEY-----\n" .
wordwrap($certificate, 64, "\n", true) .
"\n-----END RSA PRIVATE KEY-----";
return $privateKeyString;
}
//时间转换位毫秒13位
function getMillisecond() {
list($t1, $t2) = explode(' ', microtime());
return (float)sprintf('%.0f',(floatval($t1)+floatval($t2))*1000);
}
/**
* RSA验签
* @param $data 待签名数据
* @param $ali_public_key_path 支付宝的公钥文件路径
* @param $sign 要校对的的签名结果
* return 验证结果
*/
function rsaVerify($data, $aliapp_rsa_public, $sign) {
//$pubKey = file_get_contents($ali_public_key_path);
$pubkey = getPublicKeyFromX509($aliapp_rsa_public);
$res = openssl_get_publickey($pubkey);
$result = (bool)openssl_verify($data, base64_decode($sign), $res);
openssl_free_key($res);
return $result;
}
$private_key='MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANd8wU2Y0dWCPT6Nzyg8ety0w8epyNDfthrMo/2yt8o6l1leG2i2qQR1QY8bB4z83HdVE0hYEzE2nhscGGeqbm2CtXaY8dM+CjNTAVxO76c2nlgu6wUoGZBDFDuS9AXnpoQvC7NveSMl5GVg12zIRDS+F4m3CBMtJjooIrULhdDRAgMBAAECgYBeGFZqdWxPULdAnPjUB5DY1kBVa/DKMJ3a1vhXHFbAAlS7i+npEDX+wdr2S+XArVvx6d7pLLh4uXJRwTNw9Q2RjC43wvUaDBSBVBHRbcjquvhOnPVsnC/KEvw7qYJta09rfnD9ycPrCpyQ/oN7ci1gCRCeZLkcv+fuHk4Pe0zJrwJBAOsWvVN3ZCegHin1SQQUECBljuPaYQiV8yq270xOcVm39x3Ll8OncOGfTJfAxMSF44hVEhKVim7ZwEDXAUtnyBMCQQDqp6pThQHvvgB9rOvZtywwLVSr/pRR2zKL46sJ60DoHRZyIZIAPbvaAkktBjJiI4RBBU8ezg+hCUEjIrKSJegLAkEAtl9gplSTfO4JGHGxoBlUXV2L2RU7e2agSr25rE+aPYiqixG6/UxzFIT47SzdOLvJRKUCLSqXRuFj9KkW1wF+wwJBAN4en+g3O0IJBMXx7b9E2JsyDbhRX2yspQguFjVpbyNIhXq7tExuI2eWSlZIS2ECZap2sBJk0/6HmBT+PzKAl0kCQFWBKKAi3S4Hcxm4NEOHmQ2o7ZtCNbhc88hrTd2p0fejB0rbHT857SOfwxsMiVqM291Fvbobs6ZO7UTneXkhhIM=';
$privateKeyString = "-----BEGIN RSA PRIVATE KEY-----\n" .
wordwrap($private_key, 64, "\n", true) .
"\n-----END RSA PRIVATE KEY-----";
$pi_key = openssl_pkey_get_private($privateKeyString);
// echo $arr,"\n";
//$arr = md5($arr);
$encrypted = "";
openssl_sign($arr,$encrypted,$pi_key,OPENSSL_ALGO_MD5);//md5 with rsa加密
$encrypted=base64_encode($encrypted);
openssl_free_key($pi_key);