0

0

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

P粉602998670

P粉602998670

发布时间:2025-11-26 18:19:06

|

365人浏览过

|

来源于php中文网

原创

使用AES-CFB模式可实现Golang文件加密解密,密钥需16/24/32字节,IV随机生成并随密文存储,适合小文件处理。

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

在Golang中实现简单的文件加密与解密,可以使用对称加密算法如AES(Advanced Encryption Standard)。这种方式适合保护本地文件或在网络传输前加密内容。下面介绍如何用AES-CFB模式完成文件的加密和解密操作。

AES对称加密简介

AES是一种广泛使用的加密标准,支持128、192和256位密钥长度。选择CFB(Cipher Feedback)模式是因为它能将块加密算法转化为流加密,适合处理任意长度的数据,且不需要填充(padding),比CBC更灵活。

生成密钥与初始化向量(IV)

加密需要一个固定长度的密钥和每次加密都不同的IV来保证安全性。

  • 密钥应为16字节(AES-128)、24字节(AES-192)或32字节(AES-256)
  • IV长度固定为16字节,需随机生成并在解密时提供
  • 不要硬编码密钥或IV,生产环境建议使用密钥管理系统

文件加密实现

以下代码演示如何读取原始文件并输出加密后的内容到新文件:

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

站长俱乐部购物系统
站长俱乐部购物系统

功能介绍:1、模块化的程序设计,使得前台页面设计与程序设计几乎完全分离。在前台页面采用过程调用方法。在修改页面设计时只需要在相应位置调用设计好的过程就可以了。另外,这些过程还提供了不同的调用参数,以实现不同的效果;2、阅读等级功能,可以加密产品,进行收费管理;3、可以完全可视化编辑文章内容,所见即所得;4、无组件上传文件,服务器无需安装任何上传组件,无需支持FSO,即可上传文件。可限制文件上传的类

下载
func encryptFile(filePath, encryptedPath, key string) error {
    plaintext, err := os.ReadFile(filePath)
    if err != nil {
        return err
    }

    block, err := aes.NewCipher([]byte(key))
    if err != nil {
        return err
    }

    ciphertext := make([]byte, aes.BlockSize+len(plaintext))
    iv := ciphertext[:aes.BlockSize]
    if _, err := io.ReadFull(rand.Reader, iv); err != nil {
        return err
    }

    stream := cipher.NewCFBEncrypter(block, iv)
    stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext)

    return os.WriteFile(encryptedPath, ciphertext, 0644)
}

文件解密实现

从加密文件中读取IV并还原原始数据:

func decryptFile(encryptedPath, decryptedPath, key string) error {
    data, err := os.ReadFile(encryptedPath)
    if err != nil {
        return err
    }

    block, err := aes.NewCipher([]byte(key))
    if err != nil {
        return err
    }

    if len(data) < aes.BlockSize {
        return errors.New("ciphertext too short")
    }

    iv := data[:aes.BlockSize]
    ciphertext := data[aes.BlockSize:]

    stream := cipher.NewCFBDecrypter(block, iv)
    stream.XORKeyStream(ciphertext, ciphertext)

    return os.WriteFile(decryptedPath, ciphertext, 0644)
}

使用示例

确保密钥长度正确(例如使用32字节的字符串作为AES-256密钥):

key := "thisis32bitlongpassphraseimusing" // 32字节
err := encryptFile("plain.txt", "encrypted.dat", key)
if err != nil {
    log.Fatal(err)
}

err = decryptFile("encrypted.dat", "decrypted.txt", key)
if err != nil {
    log.Fatal(err)
}
注意:

该方法适用于小文件加密。大文件建议采用分块读写避免内存溢出;同时密钥管理要谨慎,不可泄露。若需更高安全级别,可结合HMAC验证完整性,或使用公钥加密体系传输对称密钥。

基本上就这些。简单场景下,AES-CFB加随机IV足以满足基本的文件保密需求。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

178

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

226

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

337

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

208

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

391

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

196

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

191

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

192

2025.06.17

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

2

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.8万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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