# RSA加密解密 PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了。 举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了。 密码没加密,那攻击者就直接拿到了密码,这是最搓的。 密码加密了,是不可逆加密,那攻击者只需要模拟那个请求即可登录。 密码加密了,是可逆加密,其中携带有时间等参数,后台可以根据时间等参数来判断是否有效,但因为是在前端加密,其加密方式也能在代码中找到,找到加密方式就可以得出解密方式。 但是如果我们使用非对称加密就可以避免以上问题。 非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。 工作过程如下,甲乙之间使用非对称加密的方式完成了重要信息的安全传输。 不说其他的了 上源码 最新修正了win平台ssl config路径问题 ~~~ <?php /** * 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 "<pre>"; //生成签名 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 "</pre>"; //创建新的密匙 echo "\n创建新的密匙:\n"; $rsa->buildNewKey(); } ~~~ 运行结果: ![](https://box.kancloud.cn/0118a53436f9059f606d9546f268fdd8_653x1002.png) > 使用的时候 自己记得把密匙存为指定的文件 > $pubfile = ROOT_PATH.'ssl/test.crt'; > $prifile = ROOT_PATH.'ssl/test.pem';