RSA加解密

在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; } }

其他类使用

1 .引用

use App\Tools\Rsa;

2 .使用

$password = Rsa::deRSA_private($pwd);

前端js使用公钥加密

  1. 引用 JSEncrypt.js文件
  2. 声明+设置
var encrypt = new JSEncrypt(); var publicKey = "-----BEGIN PUBLIC KEY----------PUBLIC KEY END PUBLIC KEY-----"; encrypt.setPublicKey(publicKey);
  1. 加密
var newPwd = encrypt.encrypt($pwd);