Go中应使用RSA-OAEP加密小数据(如AES密钥),AES-GCM实现安全对称加密;需用crypto/rand生成随机数,避免重用nonce,严禁直接RSA加密长消息或使用不安全AES模式。
Go 标准库的 crypto 包提供了安全、高效的加密原语,RSA 和 AES 是最常用的非对称与对称加密算法。下面用简洁、可运行的示例说明如何在 Go 中正确实现 RSA 密钥生成、加密/解密,以及 AES-GCM(推荐)加解密,强调关键细节和常见陷阱。
RSA 适合加密小数据(如 AES 密钥),不直接加密长消息。Go 推荐使用 OAEP(带随机盐,更安全),而非旧式 PKCS#1 v1.5。
priv, err := rsa.GenerateKey(rand.Reader, 2048)
rsa.EncryptOAEP(sha256.New(), rand.Reader, &priv.PublicKey, plaintext, nil)
rsa.DecryptOAEP(sha256.New(), rand.Reader, priv, ciphertext, nil)
pub.Size() - 2*hash.Size() - 2(OAEP),例如 2048 位密钥约支持最多 190 字节
AES-GCM 提供加密+认证(AEAD),防篡改,无需手动管理 IV 和 MAC。密钥必须为 16(AES-128)、24(AES-192)或 32(AES-256)字节。
nonce := make([]byte, 12); rand.Read(nonce)
aesgcm, _ := cipher.NewGCM(block)(block 来自 aes.NewCipher(key))ciphertext := aesgcm.Seal(nil, nonce, plaintext, nil)(输出 = nonce + ciphertext)plaintext, err := aesgcm.Open(nil, nonce, ciphertext, nil)(需传入原始 nonce 和完整密文)append(nonce, ciphertext...)),解密时切分典型场景:用 RSA 加密一个随机 AES 密钥,再用该 AES 密钥加密大段数据。
aesKey := make([]byte, 32); rand.Read(aesKey)
aesKey → 得到 encryptedAesKey
aesKey + GCM 加密原始数据 → 得到 aesCiphertext
len(encryptedAesKey) || encryptedAesKey || nonce || aesCiphertext

aesKey,再用它和 nonce 解密 AES 密文安全不是默认的,细节决定成败:
crypto/rand(非 math/rand)生成密钥、nonce、saltgolang.org/x/crypto/pkcs12 或 pkcs8)Open 失败意味着密文被篡改或密钥错误
# go
# golang
# 编码
# app
# 字节
# mac
# ai
# 标准库
# crypto
# math
# len
# nil
# append
# padding
# 算法
# 加密算法
# 公钥
# 再用
# 切分
# 随机数
# 最多
# 推荐使用
# 而非
# 可为
# 先用
# 都应
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Win11怎么清理C盘OneDrive缓存_Win11清理OneDrive缓存技巧【方法】
Go 中 defer 在 goroutine 内部不生效的原因与执行时机详解
Win11如何设置自动关机 Win11定时关机命令使用教程【技巧】
如何提升Golang程序I/O性能_Golang I/O密集型程序优化示例
Windows 10怎么隐藏特定更新补丁_Windows 10使用微软官方工具wushowhide.diagcab
How to Properly Use NumPy in VS Code
Win11怎么更改鼠标指针方案_Windows11自定义鼠标光标样式与大小
Mac怎么查看活动监视器_理解Mac进程和资源占用【指南】
php下载安装包太大怎么下载_分卷压缩下载方法【教程】
windows 10应用商店区域怎么改_windows 10微软商店切换地区方法
如何在Golang中理解指针比较_Golang地址比较与相等判断
Win11任务栏怎么调到左边_Win11开始菜单居左设置教程【步骤】
Win11如何设置省电模式 Win11开启电池节电功能【优化】
如何在 PHP 单元测试中正确模拟带方法的图像处理门面(Facade)
Win11怎么设置快速访问主页_Windows11资源管理器文件夹选项
Win11怎么关闭通知消息_屏蔽Windows 11右下角弹窗通知设置【详解】
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
win11 OneDrive怎么彻底关闭 Win11禁用并卸载OneDrive教程【分享】
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
Win11任务栏颜色怎么改_Win11自定义任务栏配色设置【美化】
Windows任务计划服务异常原因_任务调度失败的处理方案
如何优化Golang内存分配与GC调度_Golang垃圾回收优化示例
Windows 11怎么设置默认解压软件_Windows 11为ZIP/RAR文件指定默认打开程序
Windows10怎么查看硬件信息_Windows10硬件信息查询方法【指南】
Windows10系统怎么查看显卡驱动_Win10设备管理器驱动更新
Win11怎么设置桌面图标间距_Windows11注册表IconSpacing修改
Windows10如何更改桌面背景_Win10个性化幻灯片放映设置
如何在Golang中实现CI/CD流水线自动化测试_Golang持续集成测试执行方法
Win11截图快捷键是什么_Win11自带截图工具使用技巧【汇总】
Win11怎么更改任务栏位置_修改注册表将Win11任务栏置顶【教程】
Django 密码修改后会话失效的解决方案
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
PHP主流架构怎么监控运行状态_工具推荐【操作】
Win11怎么格式化U盘_Win11系统U盘格式化与文件系统选择【教程】
Windows10如何更改鼠标灵敏度_Win10鼠标属性指针选项调节
Bpmn 2.0的XML文件怎么画流程图
Windows10怎么备份注册表_Windows10注册表备份步骤【教程】
Win11如何设置文件关联 Win11修改特定文件类型的默认打开程序【详解】
Go 中 := 短变量声明的类型推导机制详解
Win11怎么把图标拖到任务栏_Win11固定应用快捷方式指南【方法】
php命令行怎么运行_通过CLI模式执行PHP脚本的步骤【说明】
Win11怎样安装剪映专业版_Win11安装剪映教程【步骤】
Python装饰器设计思路_功能增强机制说明【指导】
Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系统【安全指南】
Windows怎样拦截WPS弹窗广告_Windows拦截WPS弹窗广告设置【步骤】
Win10怎么卸载迅雷_Win10彻底卸载迅雷方法【步骤】
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
LINUX怎么设置系统语言_LINUX修改中文环境
C#如何使用XPathNavigator高效查询XML
Python多进程教程_multiprocessing模块实战
2026-01-03
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。