在laravel工程app文件夹下新建Tools文件夹,新建Rsa.php,如下
<?php
/**
* Created by PhpStorm.
* User: and
* Date: 2017/3/10
* Time: 13:11
*/
namespace App\Tools;
class Rsa {
const PRIVATE_KEY = '-----BEGIN PRIVATE KEY-----
PRIVATE_KEY
-----END PRIVATE KEY-----';
const PUBLIC_KEY = '-----BEGIN PUBLIC KEY-----
PUBLIC_KEY
-----END PUBLIC KEY-----';
public function index() {
$pwd = 'abcdefg';
$password = $this->enRSA_private($pwd);
echo 'mm = '.$password;
echo '<br>';
$password = $this->deRSA_public($password);
echo 'mm = '.$password;
}
/*----------------------------- 公钥加密, 私钥解密 --------------------------------------*/
/*
* RSA公钥加密
* 使用私钥解密
*/
public static function enRSA_public($aString) {
$pu_key = openssl_pkey_get_public(self::PUBLIC_KEY);//这个函数可用来判断公钥是否是可用的
openssl_public_encrypt($aString, $encrypted, $pu_key);//公钥加密,私钥解密
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
return $encrypted;
}
/*
* RSA私钥解密
* 有可能传过来的aString是经过base64加密的,则传来前需先base64_decode()解密
* 返回未经base64加密的字符串
*/
public static function deRSA_private($aString) {
$pr_key = openssl_pkey_get_private(self::PRIVATE_KEY);//这个函数可用来判断私钥是否是可用的
openssl_private_decrypt(base64_decode($aString), $decrypted, $pr_key);//公钥加密,私钥解密
return $decrypted;
}
/*----------------------------- 私钥加密, 公钥解密 --------------------------------------*/
/*
* RSA私钥加密
* 加密一个字符串,返回RSA加密后的内容
* aString 需要加密的字符串
* return encrypted rsa加密后的字符串
*/
public static function enRSA_private($aString) {
//echo "------------",$aString,"====";
$pr_key = openssl_pkey_get_private(self::PRIVATE_KEY);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
openssl_private_encrypt($aString, $encrypted, $pr_key);//私钥加密
$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
//echo "加密后:",$encrypted,"\n";
return $encrypted;
}
/*
* RSA公钥解密
*/
public static function deRSA_public($aString) {
$pu_key = openssl_pkey_get_public(self::PUBLIC_KEY);//这个函数可用来判断公钥是否是可用的
openssl_public_decrypt(base64_decode($aString), $decrypted, $pu_key);//公钥加密,私钥解密
return $decrypted;
}
}
其他类使用
- 引用
use App\Tools\Rsa;
2 .使用
$password = Rsa::deRSA_private($pwd);
前端js使用公钥加密
- 引用 JSEncrypt.js文件
- 声明+设置
var encrypt = new JSEncrypt();
var publicKey = "-----BEGIN PUBLIC KEY----------PUBLIC KEY END PUBLIC KEY-----";
encrypt.setPublicKey(publicKey);
- 加密
var newPwd = encrypt.encrypt($pwd);
网友评论