首页 > 后端开发 > Golang > 正文

如何用Golang实现简单的文件加密与解密_Golang 文件加解密实践

P粉602998670
发布: 2025-11-24 23:32:02
原创
511人浏览过
答案:基于AES-256-CBC模式使用crypto/aes和crypto/cipher库实现文件加解密,需生成随机IV并采用PKCS7填充,加密时将IV写入文件头,解密时先读取IV并用相同密钥解密,注意密钥安全与IV唯一性。

如何用golang实现简单的文件加密与解密_golang 文件加解密实践

在实际开发中,有时需要对敏感文件进行加密存储或传输。Golang 提供了强大的标准库支持,如 crypto/aescrypto/ciphercrypto/rand,可以方便地实现文件的加解密功能。下面介绍一种基于 AES-256-CBC 模式的简单文件加解密实践。

选择加密模式与算法

AES(高级加密标准)是目前最常用的对称加密算法之一。AES 支持 128、192 和 256 位密钥长度,安全性高。我们选择 AES-256-CBC 模式,其中 CBC(Cipher Block Chaining)需要初始化向量(IV)来增强安全性。

注意:CBC 模式要求数据长度为块大小的整数倍(AES 块大小为 16 字节),需进行填充(常用 PKCS7 填充)。

生成密钥与 IV

密钥应由用户安全提供或通过密钥派生函数(如 PBKDF2)生成。IV 不需要保密,但必须随机且唯一。每次加密使用不同的 IV 可防止相同明文生成相同密文。

立即学习go语言免费学习笔记(深入)”;

建议:IV 随加密数据一起保存,通常放在密文头部。

示例代码片段:

万彩商图
万彩商图

专为电商打造的AI商拍工具,快速生成多样化的高质量商品图和模特图,助力商家节省成本,解决素材生产难、产图速度慢、场地设备拍摄等问题。

万彩商图 201
查看详情 万彩商图
  • 使用 crypto/rand 生成安全随机 IV
  • 密钥可通过 SHA256 等哈希方式从密码派生(仅作演示,生产环境推荐 PBKDF2)

加密文件流程

读取明文文件,分块加密并写入输出文件。结构如下:

  • 生成 16 字节随机 IV
  • 将 IV 写入输出文件开头
  • 使用 AES-CBC 加密每一块数据
  • 对最后一块执行 PKCS7 填充
  • 写入加密后的密文块

加密完成后,输出文件前 16 字节为 IV,后续为密文。

解密文件流程

读取加密文件,先提取 IV,再解密内容:

  • 读取前 16 字节作为 IV
  • 使用相同密钥初始化 AES 解密器
  • 逐块解密数据
  • 移除 PKCS7 填充以恢复原始数据
  • 写入解密后的明文文件

若密钥或 IV 错误,解密结果将乱码或失败。

基本上就这些。核心在于正确使用加密模式、安全处理 IV 和填充。虽然实现不复杂,但细节容易出错,比如忘记填充或 IV 复用会降低安全性。对于生产环境,建议结合更完善的密钥管理机制。

以上就是如何用Golang实现简单的文件加密与解密_Golang 文件加解密实践的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号