首页 > 其他分享 >前端RSA非对称加密Go解密

前端RSA非对称加密Go解密

时间:2023-03-25 11:45:36浏览次数:36  
标签:加密 rsa 示例 RSA crypto 解密 Go 非对称

Person:

  • JavaScript实现非对称加密

ChatGPT:

  • JavaScript 可以使用公钥密码学算法来实现非对称加密。常用的公钥密码学算法包括 RSA 和 ECC。

下面是一个使用 RSA 算法实现非对称加密的示例:

// 生成 RSA 密钥对
const { publicKey, privateKey } = await window.crypto.subtle.generateKey(
  {
    name: "RSA-OAEP",
    modulusLength: 2048,
    publicExponent: new Uint8Array([0x01, 0x00, 0x01]), // 65537
    hash: "SHA-256",
  },
  true,
  ["encrypt", "decrypt"]
);

// 加密数据
const plaintext = "Hello, world!";
const encryptedData = await window.crypto.subtle.encrypt(
  {
    name: "RSA-OAEP",
  },
  publicKey,
  new TextEncoder().encode(plaintext)
);

// 解密数据
const decryptedData = await window.crypto.subtle.decrypt(
  {
    name: "RSA-OAEP",
  },
  privateKey,
  encryptedData
);
const decryptedText = new TextDecoder().decode(decryptedData);

console.log(decryptedText); // 输出 "Hello, world!"

上面的代码中,首先使用 generateKey 函数生成一个 RSA 密钥对,其中包括公钥和私钥。然后使用 encrypt 函数对数据进行加密,使用 decrypt 函数对加密后的数据进行解密。在加密和解密时都需要指定加密算法,这里使用了 RSA-OAEP 算法。

需要注意的是,在使用非对称加密时,加密和解密所使用的密钥不同,因此需要妥善保管私钥,不要泄露给第三方。

ChatGPT:

  • 如果你要使用 Go 语言对前面示例代码中的加密结果进行解密,可以使用 Go 标准库中的 crypto/rsa 包。

下面是一个示例代码,它可以将前面示例代码中使用 RSA 算法加密的数据解密回原始数据:

package main

import (
	"crypto/rand"
	"crypto/rsa"
	"crypto/sha256"
	"fmt"
)

func main() {
	// 从字符串中解析 RSA 密钥对
	privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
	if err != nil {
		panic(err)
	}
	publicKey := &privateKey.PublicKey

	// 从加密的数据中解密出原始数据
	encryptedData := []byte{ /* 加密后的数据 */ }
	decryptedData, err := rsa.DecryptOAEP(
		sha256.New(),
		rand.Reader,
		privateKey,
		encryptedData,
		nil,
	)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(decryptedData)) // 输出 "Hello, world!"
}

在这个示例中,我们首先使用 rsa.GenerateKey 函数生成一个 RSA 密钥对,然后使用 rsa.DecryptOAEP 函数将加密的数据解密回原始数据。

需要注意的是,在解密时需要使用与加密时相同的填充算法和哈希算法。这里使用了 OAEP 填充和 SHA-256 哈希算法。同时,解密操作的私钥必须与加密操作的公钥相对应。

另外,这个示例中的加密数据 encryptedData 需要从前面的加密代码中获取,然后将其填入到代码中。

标签:加密,rsa,示例,RSA,crypto,解密,Go,非对称
From: https://www.cnblogs.com/wangshushuo/p/17254423.html

相关文章

  • go语言学习-grpc-1
    grpc简介gRPC由google开发,是一款语言中立、平台中立、开源的远程过程调用系统,gRPC客户端和服务端可以在多种环境中运行和交互,例如用java写一个服务端,可以用go语言写客户端......
  • go的环形数组
    packagemainimport( "errors" "fmt" "os")//使用一个结构体管理环形队列typeCircleQueuestruct{ maxSizeint//4 array[5]int//数组 head......
  • PicGo+Github图床配置
    为了将PicGo设置为使用GitHub作为图床,您需要先创建一个GitHub仓库用于存储图片,然后在PicGo中进行相应的配置。您已经创建了一个仓库,所以让我们来配置PicGo。安......
  • go 笔记 init函数
    来自:goinit函数1、golang里的main函数是程序的入口函数,olang还有另外一个特殊的函数init函数,先于main函数执行init函数的主要作用:初始化不能采用初始化表达式初始化的......
  • Django笔记七之ManyToMany和OneToOne介绍
    ManyToMany是一种多对多的关系,在用途和使用方法上和外键ForeignKey类似。以下是本篇笔记的目录:ManyToMany的介绍through参数through_fields参数ManyToMany关系......
  • MongoDB官方性能测试报告:YCSB测试下的并发量提升
    1.前言MongoDB3.0的主要侧重点是提高性能,尤其是写性能和对硬件资源的利用率。为了展示我们在3.0中取得的成果和如何来应用这些新的改善,我们接下来将发布一系列博客来比较......
  • PaddleOCR之高性能Go语言实现OCR识别
    最近为了让python语言能够直接调用PaddleOCR的C++的动态链接库,针对本人已经开源的PaddleOCR项目https://gitee.com/raoyutian/paddle-ocrsharp使用的PaddleOCR的C++动态库,......
  • Go Xorm简单使用
    官网相关文档https://xorm.io/zh/docs/chapter-01/1.engine/https://gitea.com/xorm/xorm/src/branch/master/README_CN.mdxorm是一个简单而强大的Go语言ORM库.通过......
  • GitOps 实操手册 5:构建 ArgoCD GitOps 工作流
    内容简介本实验手册系列包含七个主题,涵盖了从应用容器化到GitOps工作流的实现与高级特性。通过这些实验手册,您将学习到如何构建、部署和管理应用,以及如何在Kubernetes集......
  • golang pprof 监控系列(1) —— go trace 统计原理与使用
    golangpprof监控系列(1)——gotrace统计原理与使用服务监控系列文章服务监控系列视频关于gotooltrace的使用,网上有相当多的资料,但拿我之前初学golang的经验来......