关于RSA加密技术的使用,js前端加密,Golang 后端解密 详细

关于RSA加密技术的使用,js前端加密,Golang 后端解密 详细

关于rsa 加密算法

可自行参考 rsa算法

前端JS如何使用rsa进行加密

安装jsencrypt【二选一】

  • github下载地址:链接: jsencrypt ,下载完成之后可得到
    如下目录关于RSA加密技术的使用,js前端加密,Golang 后端解密 详细_第1张图片
  • 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

修改库【在小程序上使用必看,浏览器可忽略】

在小程序中,引入这个库会报这样的错误
关于RSA加密技术的使用,js前端加密,Golang 后端解密 详细_第2张图片
原因是这个第三方库使用了 window 对象,而微信小程序的页面的脚本逻辑是在 JsCore 中运行,JsCore 是一个没有窗口对象的环境,所以不能在脚本中使用 window,也无法在脚本中操作组件。

给第三方库添加 window2 和 navigator2 变量
将程序中用到 window 和 navigator 的地方进行全局替换 为window2 和 navigator2。
关于RSA加密技术的使用,js前端加密,Golang 后端解密 详细_第3张图片

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

你可能感兴趣的:(go,rsa,笔记,加密解密,openssl,go)