RSA加密示例

Blank
2023-11-02 / 0 评论 / 153 阅读 / 正在检测是否收录...
前言

这是一种非对称式加密,很适合用在前端与后端的通信上
logzdh48.png

它分为公钥和私钥,公钥仅可用于加密,私钥用于解密

这样一来就可以将公钥发送给客户端,客户端拿着公钥加密后返回给服务器,服务器再使用私钥进行解密

我小程序也采用了这种加密方式给需要的大佬借鉴一下

首先是php端代码(后端或者服务器端),这里使用了base64_decode和url解码,因为我前端也进行了相应的编码

教程

我们需要先生成一个密钥

在线RAS密钥生成:https://www.lddgo.net/encrypt/rsa


// 解密
function Rsa_decrypts($data)
{
    // 加载openssl扩展
    if (!extension_loaded('openssl')) {
        die('OpenSSL 扩展未加载');
    }
    // 密钥文件路径
    $privateKeyFile = '改为自己路径private_key.pem';
    $publicKeyFile = '改为自己路径public_key.pem';

    // 加载私钥  
    $privateKeyResource = openssl_pkey_get_private(file_get_contents($privateKeyFile));
    if ($privateKeyResource === false) {
        return '无法加载私钥';
    }
    
    $data=urldecode($data);
    $data=base64_decode($data);
    $decryptedText = '';
    if (openssl_private_decrypt(base64_decode($data), $decryptedText, $privateKeyResource, OPENSSL_PKCS1_PADDING) === false) {
        return '';
    }
    return $decryptedText;
}

然后我们开始在微信小程序安装一下相应的库

  1. 选择小程序的调试器 —— 选择终端 —— 输入npm i wxmp-rsa -S进行安装
  2. 安装完成后小程序目录里面会生成node_modules文件夹,里面会有wxmp-rsa文件夹
  3. 安装完成后在编辑器左上角的菜单栏中找到工具 —— 构建npm
  4. 完成后小程序文件目录会构建出miniprogram_npm文件夹,里面会有wxmp-rsa文件夹

然后将你就可以开始使用了,下面是一个参考示例,同样这里我使用了Base64和url编码,./base64.js可以百度下载一个,如果不需要移除即可,这样就可以实现小程序与后端的加密通讯了,但是需要注意数据长度不能超过太长!否则将加密失败!


// 导入包
import WxmpRsa from 'wxmp-rsa'
const Base64 = require('./base64.js');

// 实例化rsa
const rsa = new WxmpRsa()
rsa.default_key_size = 512

const publicKey = "这里放公钥"


// 加密
function encrypt(data) {
  if (typeof data != 'string') {
    data = data.toString()
  }
  if (data == '') {
    return ''
  }
  if (publicKey != "") {
    rsa.setPublicKey(publicKey)
    const cryptStr = rsa.encryptLong(data)
    var r = Base64.encode(cryptStr)
    var r = encodeURIComponent(r)
    return r
  }
  return ''
}


//暴露接口
module.exports = {
  encrypt,
  UPglobalData,
}
2

评论 (0)

夸夸
取消