版权声明:本文为本小白原创文章,(转载请说明出处,标明链接) 文中若有错误,敬请指正!——————编程不过是一门失传的艺术的别名,这门艺术的名字叫做“思考”。 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 查看本文章