Goland Rsa前端加密 后端解密实例

1 篇文章 0 订阅

1.利用工具生成秘钥

在线生成rsa公钥、私钥工具

2.前端代码 Rsa加密

引入js jsencrypt.js

// 把生成的公钥复制过来
var  publicKey = `将生成的公钥粘贴复制过来`
        // rsa加密
        var encrypt = new JSEncrypt();
        encrypt.setPublicKey(publicKey);
        var encrypted = encrypt.encrypt(password);// encrypted加密后的数据
        // 执行提交,将加密后的数据提交到后台

3.后端代码 Rsa解密

3.1已入库
我们引入库的时候,可以使用go get。如果开启了go mod,也可以使用go mod 下载。

go get github.com/smartwalle/crypto4go

3.2思路就是,把我们的密钥key 和要解密的数据data,转换成base64格式的字符串,传入封装好的方法中,会返回解密后的数据。
下面包含了一个完整的例子,复制过去应该就可以执行测试。

package main

import (
	"bytes"
	"crypto/rand"
	"crypto/rsa"
	"encoding/base64"
	"fmt"
	"log"
	"strings"

	"github.com/smartwalle/crypto4go"
)
func main() {
	// 私钥
	var privateKey = `将生成的私钥粘贴复制过来`
	// 获取前端传来的加密数据
	data :=this.getString("data")
	aeskey, err := RSADecryptByPrivateKey(data , privateKey )
	if err != nil {
		fmt.Println(err.Error())
	}
	fmt.Println(aeskey)//3WZHqust0PBS9z5CBBbQig==
}

func RSADecryptByPrivateKey(data string, privateKey string) (string, error) {
	priKey, err := crypto4go.ParsePKCS1PrivateKey(crypto4go.FormatPKCS1PrivateKey(string(privateKey)))
	if err != nil {
		priKey, err = crypto4go.ParsePKCS8PrivateKey(crypto4go.FormatPKCS8PrivateKey(string(privateKey)))
		if err != nil {
			fmt.Println("ParsePKCS8PrivateKey : ", err.Error())
			return "", err
		}
	}
	// 转成base64
	key, err := base64.StdEncoding.DecodeString(data)
	if err != nil {
		fmt.Println("base64.RawURLEncoding.DecodeString : ", err.Error())
		return "", err
	}
	partLen := priKey.N.BitLen() / 8
	chunks := split([]byte(key), partLen)
	buffer := bytes.NewBufferString("")

	for _, chunk := range chunks {
		decrypted, err := rsa.DecryptPKCS1v15(rand.Reader, priKey, chunk)
		if err != nil {
			return "", err
		}
		buffer.Write(decrypted)
	}
	return buffer.String(), err
}

func split(buf []byte, lim int) [][]byte {
	var chunk []byte
	chunks := make([][]byte, 0, len(buf)/lim+1)
	for len(buf) >= lim {
		chunk, buf = buf[:lim], buf[lim:]
		chunks = append(chunks, chunk)
	}
	if len(buf) > 0 {
		chunks = append(chunks, buf[:len(buf)])
	}
	return chunks
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于Go语言中RSA加密的示例代码: ```go package main import ( "crypto/rand" "crypto/rsa" "crypto/sha256" "crypto/x509" "encoding/pem" "fmt" ) func main() { // 生成RSA密钥对 privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { panic(err) } // 将私钥序列化为PEM格式 privateKeyBytes := x509.MarshalPKCS1PrivateKey(privateKey) privateKeyPEM := pem.EncodeToMemory(&pem.Block{ Type: "RSA PRIVATE KEY", Bytes: privateKeyBytes, }) // 打印私钥 fmt.Println(string(privateKeyPEM)) // 将公钥序列化为PEM格式 publicKeyBytes, err := x509.MarshalPKIXPublicKey(&privateKey.PublicKey) if err != nil { panic(err) } publicKeyPEM := pem.EncodeToMemory(&pem.Block{ Type: "RSA PUBLIC KEY", Bytes: publicKeyBytes, }) // 打印公钥 fmt.Println(string(publicKeyPEM)) // 要加密的明文 plaintext := []byte("Hello, world!") // 使用公钥加密明文 ciphertext, err := rsa.EncryptOAEP(sha256.New(), rand.Reader, &privateKey.PublicKey, plaintext, nil) if err != nil { panic(err) } // 打印密文 fmt.Printf("加密后的密文:%x\n", ciphertext) // 使用私钥解密密文 decrypted, err := privateKey.Decrypt(nil, ciphertext, &rsa.OAEPOptions{Hash: sha256.New()}) if err != nil { panic(err) } // 打印解密后的明文 fmt.Printf("解密后的明文:%s\n", decrypted) } ``` 这段代码首先生成一个2048位的RSA密钥对,然后将私钥和公钥序列化为PEM格式并打印出来。接着,使用公钥加密一个明文,并打印出密文。最后使用私钥解密密文,并打印出明文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值