如何使用Golang crypto实现加密和解密_RSA和AES示例


Go中应使用RSA-OAEP加密小数据(如AES密钥),AES-GCM实现安全对称加密;需用crypto/rand生成随机数,避免重用nonce,严禁直接RSA加密长消息或使用不安全AES模式。

Go 标准库的 crypto 包提供了安全、高效的加密原语,RSA 和 AES 是最常用的非对称与对称加密算法。下面用简洁、可运行的示例说明如何在 Go 中正确实现 RSA 密钥生成、加密/解密,以及 AES-GCM(推荐)加解密,强调关键细节和常见陷阱。

生成并使用 RSA 密钥对(PKCS#1 v1.5 或 OAEP)

RSA 适合加密小数据(如 AES 密钥),不直接加密长消息。Go 推荐使用 OAEP(带随机盐,更安全),而非旧式 PKCS#1 v1.5。

  • 生成 2048 位私钥:priv, err := rsa.GenerateKey(rand.Reader, 2048)
  • 公钥加密(OAEP,使用 SHA256):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 加密与解密(推荐对称方案)

AES-GCM 提供加密+认证(AEAD),防篡改,无需手动管理 IV 和 MAC。密钥必须为 16(AES-128)、24(AES-192)或 32(AES-256)字节。

  • 生成随机 12 字节 nonce(GCM 要求):nonce := make([]byte, 12); rand.Read(nonce)
  • 创建 cipher: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 和完整密文)
  • 关键:nonce 绝对不可重用;建议将 nonce 存在密文前(如 append(nonce, ciphertext...)),解密时切分

组合使用 RSA + AES 实现混合加密

典型场景:用 RSA 加密一个随机 AES 密钥,再用该 AES 密钥加密大段数据。

  • 生成 32 字节 AES 密钥:aesKey := make([]byte, 32); rand.Read(aesKey)
  • 用 RSA 公钥加密 aesKey → 得到 encryptedAesKey
  • aesKey + GCM 加密原始数据 → 得到 aesCiphertext
  • 最终密文结构可为:len(encryptedAesKey) || encryptedAesKey || nonce || aesCiphertext
  • 解密时先用 RSA 私钥恢复 aesKey,再用它和 nonce 解密 AES 密文

注意事项与避坑提示

安全不是默认的,细节决定成败:

  • 永远使用 crypto/rand(非 math/rand)生成密钥、nonce、salt
  • RSA 不要用于直接加密用户输入;AES 模式只选 GCM 或 CCM,避免 ECB、CBC(需额外处理 padding 和 MAC)
  • 私钥务必保密,公钥可公开;保存私钥建议用 PEM 编码 + 密码保护(需额外集成 golang.org/x/crypto/pkcs12pkcs8
  • 所有错误都应检查,尤其 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

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.