(RSA加密解密)PHP中使用rsa加密和解密的使用方法

来源:赵克立博客 分类: PHP 标签:PHP加密解密发布时间:2016-06-25 11:27:56最后更新:2016-06-25 12:19:27浏览:2619
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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

QQ截图20160625113100.png

之后会在当前目录生成三个文件 

QQ截图20160625113143.png

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";

运行之后效果:

QQ截图20160625112316.png


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python