Golang Base64 编码

news/2025/3/7 4:22:32/文章来源:https://www.cnblogs.com/szz1/p/18756884

在 Golang 中,Base64 编码是一种常见的数据编码方式,广泛用于数据存储、传输和加密处理。Go 语言标准库提供了 encoding/base64 包,便于开发者高效地进行 Base64 编解码操作。


目录

  1. Base64 简介
  2. Golang Base64 编码与解码
  3. 不同 Base64 编码方式
  4. Base64 常见应用场景
  5. 最佳实践
  6. 总结
  7. 参考资料

Base64 简介

Base64 是一种基于 64 个可打印字符来表示二进制数据的编码方式,主要用于:

  • 处理二进制数据在基于文本的协议(如 JSON、XML、HTML)中的传输
  • 存储加密后的数据
  • 处理二进制文件,如图片、音频数据等

Base64 采用的字符集如下:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

如果数据长度不是 3 的倍数,Base64 编码会在末尾填充 = 符号。


Golang Base64 编码与解码

Go 语言提供了 encoding/base64 包,可以方便地进行 Base64 编解码。

1. Base64 编码

使用 base64.StdEncoding.EncodeToString() 将字符串转换为 Base64 编码:

package mainimport ("encoding/base64""fmt"
)func main() {// 原始数据data := "Hello, Golang Base64!"// Base64 编码encoded := base64.StdEncoding.EncodeToString([]byte(data))// 输出编码后的结果fmt.Println("Base64 编码:", encoded)
}

2. Base64 解码

使用 base64.StdEncoding.DecodeString() 进行 Base64 解码:

package mainimport ("encoding/base64""fmt"
)func main() {// Base64 编码数据encodedData := "SGVsbG8sIEdvbGFuZyBCYXNlNjQh"// Base64 解码decoded, err := base64.StdEncoding.DecodeString(encodedData)if err != nil {fmt.Println("解码失败:", err)return}// 输出解码后的结果fmt.Println("Base64 解码:", string(decoded))
}

不同 Base64 编码方式

Golang 提供了三种不同的 Base64 编码方式:

  1. 标准 Base64(StdEncoding

    • 使用 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ 作为字符集
    • 结尾可能包含填充字符 =
  2. URL 兼容 Base64(URLEncoding

    • 使用 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_ 作为字符集
    • 避免 +/ 影响 URL 解析
    • 适用于 URL 或 JSON 传输
  3. 不带填充 Base64(RawStdEncoding & RawURLEncoding

    • StdEncodingURLEncoding 类似
    • 但不会在末尾添加 = 进行填充

1. URL 兼容 Base64 编码

package mainimport ("encoding/base64""fmt"
)func main() {data := "Hello, Golang Base64!"// URL Base64 编码encoded := base64.URLEncoding.EncodeToString([]byte(data))// 解码decoded, _ := base64.URLEncoding.DecodeString(encoded)fmt.Println("URL Base64 编码:", encoded)fmt.Println("URL Base64 解码:", string(decoded))
}

2. 无填充 Base64 编码

package mainimport ("encoding/base64""fmt"
)func main() {data := "Hello, Golang Base64!"// 无填充 Base64 编码encoded := base64.RawStdEncoding.EncodeToString([]byte(data))// 解码decoded, _ := base64.RawStdEncoding.DecodeString(encoded)fmt.Println("无填充 Base64 编码:", encoded)fmt.Println("无填充 Base64 解码:", string(decoded))
}

Base64 常见应用场景

  1. 图片和文件转换

    • 例如,将图片转换为 Base64 以便嵌入 HTML、CSS 或 JSON 结构中
    • data:image/png;base64,xxxxxx
  2. 安全传输

    • 编码数据避免传输过程中的格式破坏,如 + 变成空格
  3. 存储加密数据

    • Base64 可用于存储密钥、JWT 令牌等
  4. HTTP 认证

    • Basic Auth 认证中,用户名和密码会被 Base64 编码后传输

最佳实践

  • 使用 URL 兼容 Base64(URLEncoding

    • 避免 +/ 在 URL 传输时出现问题
  • 避免过度使用 Base64

    • Base64 编码后数据体积增大 33%(每 3 字节变成 4 字节)
    • 如非必要,可使用二进制数据传输
  • 安全性

    • Base64 不是 加密手段,仅用于编码
    • 若数据需要加密,建议结合 AESRSA 等加密算法

总结

  • Base64 是一种文本编码方式,适用于二进制数据的文本传输
  • Go 语言提供 encoding/base64 进行编码和解码
  • 主要有 StdEncodingURLEncodingRawStdEncoding 等编码方式
  • 适用于 URL、JSON、HTTP 认证、图片存储等场景

参考资料

  • Go 官方文档 - encoding/base64
  • Base64 维基百科

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/894913.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

photoshop 色彩平衡工具

色彩平衡工具作用于单个像素。 在不勾选保持明度的情况下,加红减青相当于直接增加像素的R值。相应的,加青减红相当于等比例降低G和B。 其他两项亦然。 也就是说,加红相当于直接在R通道上拉曲线。在勾选保持明度的情况下,加红减青会增加R值,降低G和B以保持明度不变。推测此…

从零到一打造商用AIAgent

这篇内容将从整体上介绍打造 AI Agent 的七个步骤,分别是需求梳理、软件选型、提示工程、数据库、构建 UI 界面、测试评估和部署发布。 梳理工作流 第一步,我们需要做的工作就是梳理需求。 首先,我们需要明确,做这个 AI Agent 是为了帮我们解决什么问题?如果你是一位自媒…

[AI/AIGC/LLM] 通义千问QwQ-32B: 阿里巴巴开源的、最新最强开源(推理)大模型 | Apache 2.0

序:2025年3月6日凌晨,阿里巴巴发布并开源全新的推理模型通义千问QwQ-32B。 通过大规模强化学习,千问QwQ-32B在数学、代码及通用能力上实现质的飞跃,整体性能比肩DeepSeek-R1。 在保持强劲性能的同时,千问QwQ-32B还大幅降低了部署使用成本,在消费级显卡上也能实现本地部署…

The Vendi Score: A Diversity Evaluation Metric for Machine Learning 论文笔记

介绍 我们基于生态学和量子统计力学的思想,提出了 Vendi 分数用来解决多样性评估问题 Vendi 分数不需要参考数据集或样本或标签的分布,因此它是通用的,适用于任何可以定义相似性的领域的生成模型、解码算法和数据集 创新 之前的多样性指标的适用性可能受到限制,因为它们需要…

MM-LLMs: Recent Advances in MultiModal Large Language Models 论文笔记

介绍 这是一篇多模态大模型的综述 MM-LLM面临的核心挑战是如何有效地将LLM与其他模式的模型连接起来以实现协作推理 建立了一个网站(https://mm-llms.github.io)来跟踪MM-LLM的最新进展并方便大家更新 模型架构冻结部分不可训练,未冻结部分是可训练的Modality Encoder:对不…

Root cause detection in a service-oriented architecture 论文笔记

背景 MonitorRank 是最早使用随机游走的策略定位故障根因服务的方法,MonitorRank 把系统的服务分成三类:前端服务:负责接收用户的请求以及进一步调用下游请求以完成用户的请求。 应用服务:负责真正处理用户请求的逻辑。 数据服务:负责提供经过包装的数据。(应用服务和数据…

MM-LLMS 论文笔记

介绍 这是一篇多模态大模型的综述 MM-LLM面临的核心挑战是如何有效地将LLM与其他模式的模型连接起来以实现协作推理 建立了一个网站(https://mm-llms.github.io)来跟踪MM-LLM的最新进展并方便大家更新 模型架构冻结部分不可训练,未冻结部分是可训练的Modality Encoder:对不…

MonitorRank 论文笔记

背景 MonitorRank 是最早使用随机游走的策略定位故障根因服务的方法,MonitorRank 把系统的服务分成三类:前端服务:负责接收用户的请求以及进一步调用下游请求以完成用户的请求。 应用服务:负责真正处理用户请求的逻辑。 数据服务:负责提供经过包装的数据。(应用服务和数据…

MicroRank 论文笔记

任务 异常检测->根因定位(服务实例级别)(针对延迟问题) 贡献MicroRank 是第一种通过正常和异常trace提取信息来对微服务应用程序进行根本原因定位的方法 我们提出了一种基于扩展频谱分析的微服务环境中新颖的根本原因定位方法 我们将 OpenTelemetry trace API 纳入 Goog…

Log3T 论文笔记

挑战 ① 基于可用日志先验知识设计的日志解析器性能有限,且不具有泛化性 ② 一些日志解析器在日志本身差异性大时无法正常工作 ③ 劳动密集型模型调整 框架离线训练 使用 WordPiece 进行 Tokenization(子词模型),然后输入到 Transformer 中进行上下文特征集成,然后输入 si…

软件工程-作业2:第一次个人编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023这个作业在哪里 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023/homework/13324这个作业的目标 系统化流程地完成软件开发,使用性能测试工具和单元测试以优化…

LLaVA 论文笔记

介绍 提出了 visual instruction-tuning,这是将指令微调扩展到多模态的首次尝试 相关工作 多模态的指令微调 Agent、指令微调 数据 使用 ChatGPT/GPT-4 来将数据转化为 multimodel instrustion-following data 为每一个图像生成三种 mulmodal instruction-following data,对于…