关于rsa 加密算法
可自行参考 rsa算法
前端JS如何使用rsa进行加密
安装jsencrypt【二选一】
- github下载地址:链接: jsencrypt ,下载完成之后可得到
如下目录 - npm 安装
npm i jsencrypt
生成openssl 公钥和私钥【公钥加密,私钥服务端解密】
- 在需要存储公钥和私钥的文件夹下,进入控制台cmd
- 输入命令,生成私钥
openssl genrsa -out rsa_1024_priv.pem 1024
- 输入命令,生成公钥
openssl rsa -pubout -in rsa_1024_priv.pem -out rsa_1024_pub.pem
修改库【在小程序上使用必看,浏览器可忽略】
在小程序中,引入这个库会报这样的错误
原因是这个第三方库使用了 window 对象,而微信小程序的页面的脚本逻辑是在 JsCore 中运行,JsCore 是一个没有窗口对象的环境,所以不能在脚本中使用 window,也无法在脚本中操作组件。
给第三方库添加 window2 和 navigator2 变量
将程序中用到 window 和 navigator 的地方进行全局替换 为window2 和 navigator2。
JS前端加密 rsa.js
# 此处导入根据自己存放文件夹的位置
# 注意的是 小程序中 使用此包会出错 可参考
import {JSEncrypt} from '../jsencrypt/bin/jsencrypt.js';
export function encode(){
var PUBLIC_KEY = '此处填写你生成的公钥';
//使用公钥加密
var encrypt = new JSEncrypt();
encrypt.setPublicKey(PUBLIC_KEY);
var str = {"uid":"1223334","pwd":"asd"}
//此处需要注意,encrypt.encrypt() 中只能传入字符串
return encrypt.encrypt(JSON.stringify(str));
}
Golang服务端解密
# cipherText:加密后的文本 path:存放私钥的地址
func RSA_Decrypt(cipherText []byte, path string) string {
code, _:= base64.StdEncoding.DecodeString(cipherText)
//打开文件
file, err := os.Open(path)
if err != nil {
panic(err)
}
defer file.Close()
//获取文件内容
info, _ := file.Stat()
buf := make([]byte, info.Size())
file.Read(buf)
//pem解码
block, _ := pem.Decode(buf)
//X509解码
privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
panic(err)
}
//对密文进行解密
plainText, _ := rsa.DecryptPKCS1v15(rand.Reader, privateKey, code)
//返回明文
return string(plainText)
}