# RSA加密解密
PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了。
举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了。
密码没加密,那攻击者就直接拿到了密码,这是最搓的。
密码加密了,是不可逆加密,那攻击者只需要模拟那个请求即可登录。
密码加密了,是可逆加密,其中携带有时间等参数,后台可以根据时间等参数来判断是否有效,但因为是在前端加密,其加密方式也能在代码中找到,找到加密方式就可以得出解密方式。
但是如果我们使用非对称加密就可以避免以上问题。
非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
工作过程如下,甲乙之间使用非对称加密的方式完成了重要信息的安全传输。
不说其他的了 上源码
最新修正了win平台ssl config路径问题
~~~
/**
* Created by PhpStorm.
* Power by Mikkle
* QQ:776329498
* Date: 2017/4/18
* Time: 9:49
*/
namespace app\erp\controller;
use app\base\controller\Rsa;
class Test extends Base
{
public function index(){
header('Content-Type:text/html;Charset=utf-8;');
$string = isset($_GET['a']) ? $_GET['a'] : '测试123';
//证书路径
$pubfile = ROOT_PATH.'ssl/test.crt';
$prifile = ROOT_PATH.'ssl/test.pem';
//apache路径下的openssl.conf文件路径
$openssl_config_path = "D:/phpStudy/Apache/conf/openssl.cnf";
$rsa =new Rsa($pubfile,$prifile,$openssl_config_path);
echo "
";
//生成签名
echo "\n签名的字符串:\n$string\n\n";
$sign = $rsa->sign($string);
echo "\n生成签名的值:\n$sign";
//验证签名
$p=$rsa->verify($string, $sign);
echo "\n验证签名的值:\n$p";
//加密
echo "\n\r加密的字符串:\n$string\n\n";
$x = $rsa->encrypt($string);
echo "\n生成加密的值:\n$x";
//解密
$y = $rsa->decrypt($x);
echo "\n解密的值:\n$y";
echo "
";//创建新的密匙
echo "\n创建新的密匙:\n";
$rsa->buildNewKey();
}
~~~
运行结果:
![](https://box.kancloud.cn/0118a53436f9059f606d9546f268fdd8_653x1002.png)
> 使用的时候 自己记得把密匙存为指定的文件
> $pubfile = ROOT_PATH.'ssl/test.crt';
> $prifile = ROOT_PATH.'ssl/test.pem';