1.生成密钥和公钥:
开始前需要准备openssl环境
linux 需安装openssl工具包,win下需要安装openssl的程序
2.php代码:
function RSA(){
$pukey='-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDmna16KhQQwCn5DP4Zu7fDKMwG
qhztmwzK3qql4noy3aKs06qpSbmVlHff/DUdAdEeCuAJE5SpFWGM5p8JOEM+S2wX
srUNtOKoLQ5wN3kTvquTTxfQmVT/oWdPFpu85/1tZaeMPic/TvRoRdapoautEFhV
U+Z21SzxeGIiJ1nNHQIDAQAB
-----END PUBLIC KEY-----
';
$prkey='-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDmna16KhQQwCn5DP4Zu7fDKMwGqhztmwzK3qql4noy3aKs06qp
SbmVlHff/DUdAdEeCuAJE5SpFWGM5p8JOEM+S2wXsrUNtOKoLQ5wN3kTvquTTxfQ
mVT/oWdPFpu85/1tZaeMPic/TvRoRdapoautEFhVU+Z21SzxeGIiJ1nNHQIDAQAB
AoGAYYZ+7XHMCIVreqIu9yz2enbPSWY5U5ZFY6mkmwBa0xX9jH765hqCfCpMQ5HB
2GGDUOQieFQqgxLCrTZ+PQTpEipGrg1b+FjNdeJKltoPfeiBKXL2yJgK6oRMs0YT
RasYsuD67kvxnet1dUQiUdUiGWNl0mC2SgswdcGrLYJx6MECQQD/rnPN8P40xmxZ
FoZhaUeERE6DykqMeLH9ecQEu0sd+p2Pt8izBRJZKVvj/Ufs+bayg0bZjhI5wPVD
1rndQF6tAkEA5uc7F3eEbEMT4XygpXtXzn0DRD+SH9spd3y/GA92adLyVEMIHoST
yyb57kNBShotXhbFDuxqisD7wF98ASImMQJATrOXR+QPi5UsUrvhP2jVr7wK4vxI
uDaKqzhpAv/X3nF/QHbU224LONDHTUVwd1xiRU6tZ1gY+hgQJwKYkac3vQJBAIgI
XkXbAccOVZ4YYERdwENEXzJMCXh/E5Tzh1lTcr2xq1Z9D0F7dd7PnZsDQGm5tlSi
MYIzQilwvGB/YH0Cc2EQHVIUsJoBAP1goc9ao6QXR14jZfY5bwW+5iIFY+U38ep
C4Q5rHRWWDBqwumeI1eaO/wl7hEzBeMNzm3UcTqfi9s=
-----END RSA PRIVATE KEY-----
';
$str='ruoke_Test';
openssl_public_encrypt($str,$encrypted,$pukey);//公钥加密
echo '加密后的密文:'.$encrypted,"<br>";//加密后的密文
$encrypted = base64_encode($encrypted);//base64编码
echo 'base64编码后的密文:'.$encrypted,"<br>";
$res = openssl_get_privatekey($prkey);
//用base64将内容还原成二进制
$content = base64_decode($encrypted);
//把需要解密的内容,按128位拆开解密
$result = '';
for($i = 0; $i < strlen($content)/128; $i++ ) {
$data = substr($content, $i * 128, 128);
openssl_private_decrypt($data, $decrypt, $res);
$result .= $decrypt;
}
openssl_free_key($res);
echo '解密后内容:'.$result;
}
运行结果: