在现代网络安全通信中,非对称加密扮演着至关重要的角色。Go语言标准库中的 crypto/rsa 包为我们提供了强大而简洁的接口来实现 RSA 算法。本教程将手把手带你从零开始掌握 Go语言 RSA非对称加密 的基本用法,即使是编程小白也能轻松上手!
RSA 是一种经典的非对称加密算法,它使用一对密钥:公钥(public key)和私钥(private key)。公钥可以公开给任何人用于加密数据,而只有持有对应私钥的人才能解密。这种机制广泛应用于 HTTPS、数字签名、安全登录等场景。
在使用 crypto/rsa 包之前,我们需要先生成一对 RSA 密钥。Go 提供了 rsa.GenerateKey 函数来完成这项工作。
package mainimport ( "crypto/rand" "crypto/rsa" "fmt")func main() { // 生成2048位的RSA密钥对 privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { panic(err) } // 获取公钥 publicKey := &privateKey.PublicKey fmt.Println("私钥已生成,模数长度:", privateKey.N.BitLen()) fmt.Println("公钥已获取")} 上面的代码使用 crypto/rand 提供的安全随机数生成器创建了一个 2048 位的 RSA 私钥,并从中提取出对应的公钥。2048 位是目前推荐的安全长度。
有了公钥后,我们就可以用它来加密一段明文。注意:RSA 只能加密比密钥长度短的数据(例如 2048 位密钥最多加密 245 字节)。对于长文本,通常结合对称加密(如 AES)使用。
import ( "crypto/rand" "crypto/rsa" "crypto/sha256" "encoding/hex" "fmt")// 假设我们已经有了 publicKeymessage := []byte("Hello, RSA encryption!")// 使用 OAEP 填充方案进行加密(推荐)label := []byte("")hash := sha256.New()encryptedBytes, err := rsa.EncryptOAEP(hash, rand.Reader, publicKey, message, label)if err != nil { panic(err)}fmt.Printf("加密后的数据(十六进制):%s\n", hex.EncodeToString(encryptedBytes)) 只有拥有私钥的一方才能解密上述密文。解密过程如下:
// 使用相同的 hash 和 labeldecryptedBytes, err := rsa.DecryptOAEP(hash, rand.Reader, privateKey, encryptedBytes, label)if err != nil { panic(err)}fmt.Printf("解密后的原文:%s\n", string(decryptedBytes))// 输出:Hello, RSA encryption! 下面是一个完整的可运行程序,演示了从生成密钥到加解密的全过程:
package mainimport ( "crypto/rand" "crypto/rsa" "crypto/sha256" "encoding/hex" "fmt")func main() { // 1. 生成密钥对 privateKey, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { panic(err) } publicKey := &privateKey.PublicKey // 2. 准备要加密的消息 message := []byte("Go语言实现RSA非对称加密真简单!") // 3. 加密 hash := sha256.New() encrypted, err := rsa.EncryptOAEP(hash, rand.Reader, publicKey, message, nil) if err != nil { panic(err) } fmt.Printf("[加密成功] 密文长度:%d 字节\n", len(encrypted)) // 4. 解密 decrypted, err := rsa.DecryptOAEP(hash, rand.Reader, privateKey, encrypted, nil) if err != nil { panic(err) } fmt.Printf("[解密成功] 原文:%s\n", string(decrypted))} 通过本教程,你已经掌握了如何在 Go 语言中使用 crypto/rsa 包进行基本的非对称加密操作。无论是构建安全通信系统、实现数字签名,还是学习密码学原理,这些知识都是坚实的基础。希望这篇 Go实现RSA加解密 的入门指南能助你在安全开发之路上更进一步!
关键词回顾:Go语言 RSA非对称加密、crypto/rsa包教程、Go实现RSA加解密、非对称加密入门
本文由主机测评网于2025-12-10发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125736.html