(RSA加密解密)PHP中使用rsa加密和解密的使用方法
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2016-06-25 12:19:27
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
首先要生成私钥和公钥,要确定你的cmd下能运行openssl命令,然后把下面批处理保存成一个creatersa.bat文件双击运行
openssl genrsa -out rsa_private_key.pem 1024 openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key_pkcs8.pem openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem pause
之后会在当前目录生成三个文件
php代码的实现首先要确保你的php已经开启啦openssl扩展
下面是使用代码
<?php //你的私钥文件路径 $fp = fopen("rsa_private_key.pem", "r"); $private_key = fread($fp, 8192); fclose($fp); //你的公钥文件路径 $fp1 = fopen("rsa_public_key.pem", "r"); $public_key = fread($fp1, 8192); fclose($fp1); function rsa_private_encrypy($data = '', $private_key = '') { //这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id $pi_key = openssl_pkey_get_private($private_key); if (!$pi_key) { return ''; } $encrypted = ''; openssl_private_encrypt($data, $encrypted, $pi_key); //私钥加密 //加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的 return base64_encode($encrypted); } function rsa_public_decrypt($encrypted = '', $public_key = '') { //这个函数可用来判断公钥是否是可用的 $pu_key = openssl_pkey_get_public($public_key); if (!$pu_key) { return ''; } $decrypted = ''; openssl_public_decrypt(base64_decode($encrypted), $decrypted, $pu_key); //公钥解密 return $decrypted; } function rsa_public_encrypt($data = '', $public_key = '') { //这个函数可用来判断公钥是否是可用的 $pu_key = openssl_pkey_get_public($public_key); if (!$pu_key) { return ''; } $encrypted = ''; openssl_public_encrypt($data, $encrypted, $pu_key); //公钥加密 return base64_encode($encrypted); } function rsa_private_decrypt($encrypted = '', $private_key = '') { //这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id $pi_key = openssl_pkey_get_private($private_key); if (!$pi_key) { return ''; } $decrypted = ''; openssl_private_decrypt(base64_decode($encrypted), $decrypted, $pi_key); //私钥解密 return $decrypted; } $data = '这个是要测试的加密字符串'; //要加密的数据 $encrypted = ""; //加密后的数据 $decrypted = ""; //解密后的数据 echo "要加密的数据:" . $data . "\n"; echo "====================================================\n"; echo "private key encrypt:\n"; $encrypted = rsa_private_encrypy($data, $private_key); echo '私钥加密后:' . $encrypted . "\n"; echo "public key decrypt:\n"; $decrypted = rsa_public_decrypt($encrypted, $public_key); echo '公钥解密后:' . $decrypted . "\n"; echo "public key encrypt:\n"; echo "====================================================\n"; $encrypted = rsa_public_encrypt($data, $public_key); echo '公钥加密后:' . $encrypted, "\n"; echo "private key decrypt:\n"; $decrypted = rsa_private_decrypt($encrypted, $private_key); echo '私钥解密后:' . $decrypted, "\n";
运行之后效果: