PHP使用openssl实现RSA加解密

版权声明:本文为本小白原创文章,(转载请说明出处,标明链接) 文中若有错误,敬请指正!——————编程不过是一门失传的艺术的别名,这门艺术的名字叫做“思考”。 https://blog.csdn.net/qq_32737755/article/details/85053688

业务场景就不用说了,有很多地方都用的到。在此写出一个例子,一来供自己查阅,二来分享一下。。。

生成公钥、私钥的方法网上有很多,不过有个简单的方法:

引用博友写好的,点击链接查看:linux下如何生成公钥和私钥

获取到公钥、私钥之后,来看加密解密~~~~~~

  • 在此提一下跨语言问题(php-java),通过接口传输后,对方(java)解密出来的可能得到的是ASCII编码过的字节。

加解密的方式如下(本人觉的公钥私钥放到文件中更合适):

先看加密方法,加密方式有两种,一为使用cmd来生成,在代码中使用系统函数。二为基本代码实现。

加密方式一:

//公钥加密
/***
*$data :需加密数据
*$pubFile :公钥文件路径+名称
*
***/
function pubEncryptFileKey_cmd($data,$pubFile){
	if(empty($data) || empty($pubFile)){
		return '';
	}
	$cmd = "echo -n '{$data}' | openssl rsautl -encrypt -pubin -inkey {$pubFile} | openssl enc -base64 -A";
	$retval = -1;
	$ret = system($cmd,$retval);
	ob_clean();
	if(0 != $retval || empty($ret)){
		return '';
	}
	return $ret;
}

加密方式二:

//公钥加密
/***
*$data :需加密数据
*$pubFile :公钥文件路径+名称
*
***/
function pubEncryptFileKey($data,$pubFile){
	if(empty($data) || empty($pubFile)){
		return '';
	}
	$fp = fopen($pubFile,"r");
	if(false === $fp){
		return '';
	}
	$vpos_pubkey = fread($fp,8192);
	fclose($fp);
	return pubEncrypt($data,$vpos_pubkey);
}
 
function pubEncrypt($data,$pubkey){
	$encrypted = '';
	$r = openssl_public_encrypt($data, $encrypted, $pubkey);
	if($r){
		return base64_encode($encrypted);
	}
	return '';
}

上面两种加密方式本质上是一样的。下面来看解密方法:

解密方式:

//私钥解密
/***
*$encrypted :密文
*$pubFile :私钥文件路径+名称
*
***/
function privDecryptFileKey($encrypted,$privFile){
	$fp = fopen($privFile,"r");
	if(empty($encrypted) || false === $fp){
		return '';
	}
	$vpos_prikey = fread($fp,8192);
	fclose($fp);
	$prikey = openssl_pkey_get_private($vpos_prikey);
	$ostr = privDecrypt($encrypted,$prikey);
	return $ostr;
}

function privDecrypt(){
	$encrypted = base64_decode($encrypted);
	$r = openssl_private_decrypt($encrypted,$decrypted,$prikey);
	if($r){
     	return $decrypted;
	}
	return '';			
}
扫描二维码关注公众号,回复: 4714957 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_32737755/article/details/85053688