基于YII和OPENSSL 实现非对称加密,找回密码功能
在yii框架下建一个控制器
文件/controllers/OpensslController.php 代码如下. 有备注
<?php
namespace app\controllers;
use \yii\web\Controller;
class OpensslencodeController extends Controller
public function actionCreatekey(){
//1.创建一个私钥资源
$key = openssl_pkey_new();
//2.保存私钥
//openssl_pkey_export($key, $out);//$out == 下面这么写入.txt的文本内容
openssl_pkey_export_to_file($key, './private.txt');
//3.c取出公钥
$pub_str = openssl_pkey_get_details($key)['key'];
//4.保存公钥。提示成功
file_put_contents('./public.txt', $pub_str);
return '还在等什么呢,赶紧去加密吧!<a href="'.\yii\helpers\Url::to(['opensslencode/encode','Get参数1'=>'参数1的结果']).'">快来点我</a>';
}
public function actionEncode(){
//原id 123
$id = '123';
//取出公钥,进行加密
$pub_obj = openssl_get_publickey(file_get_contents('./public.txt'));
//加密
openssl_public_encrypt($id, $encode_id, $pub_obj);
//URL传递第一步,base64;
$url = base64_encode($encode_id); //var_dump($url);
var_dump($url);
//return '<a target=_blank href="'.\yii\helpers\Url::to(['opensslencode/decode','code' => $url]).'">加完密了。点击我。找回密码</a>';
return '<a target=_blank href="/web/?r=opensslencode/decode&code='.urlencode($url).'">加完密了。点击我。找回密码</a>';
}
public function actionDecode(){
//接到传递过来的 base64之后的code
$code = ( \yii::$app->request->get('code'));
//base64解码
$encode = base64_decode($code);//
//开始解密,接下来先获取私钥(因为刚才 是 用的公钥加的密)
$private_key = openssl_get_privatekey(file_get_contents('./private.txt'));
//私钥解密
openssl_private_decrypt($encode, $result, $private_key);
return '用户id是'.$result.';这个结果,别人不可能解出来。只有我能解出来。所以说。这个链接是 他本人,从他本人的邮箱中点击的。 相对来说 。安全的很。可以让他直接修改。';
}
}