PHP加解密技术之RSA加解密
咻兔哔 / 技术文章

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

使用

PHP使用
    use App\Tools\Rsa;
    $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);
 
支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章