分析 Base64 编码和 URL 安全 Base64 编码

news/2024/9/22 16:12:48/

前言

在处理数据传输和存储时,Base64 编码是一种非常常见的技术。它可以将二进制数据转换为文本格式,便于在文本环境中传输和处理。Go 语言提供了对标准 Base64 编码和 URL 安全 Base64 编码的支持。本文将通过一个示例代码,来分析这两种编码方式的异同点。

代码示例

package mainimport (b64 "encoding/base64""fmt"
)func main() {// 这是将要编解码的字符串。data := "xz?y$!*&)('-=@~"// 使用标准 Base64 编码stdEncoded := b64.StdEncoding.EncodeToString([]byte(data))fmt.Println("标准 Base64 编码:", stdEncoded)// 解码标准 Base64 编码stdDecoded, err := b64.StdEncoding.DecodeString(stdEncoded)if err != nil {fmt.Println("解码标准 Base64 出错:", err)} else {fmt.Println("解码标准 Base64:", string(stdDecoded))}fmt.Println()// 使用 URL 和文件名安全的 Base64 编码urlEncoded := b64.URLEncoding.EncodeToString([]byte(data))fmt.Println("URL 安全 Base64 编码:", urlEncoded)// 解码 URL 安全 Base64 编码urlDecoded, err := b64.URLEncoding.DecodeString(urlEncoded)if err != nil {fmt.Println("解码 URL 安全 Base64 出错:", err)} else {fmt.Println("解码 URL 安全 Base64:", string(urlDecoded))}
}

运行这段代码后,输出结果如下:

标准 Base64 编码: eHo/eSQhKiYpKCctPUB+
解码标准 Base64: xz?y$!*&)('-=@~URL 安全 Base64 编码: eHo_eSQhKiYpKCctPUB-
解码 URL 安全 Base64: xz?y$!*&)('-=@~

分析总结

  • 标准 Base64 编码:

使用字符集 A-Z, a-z, 0-9, +, / 和 =。
编码后的输出为 eHo/eSQhKiYpKCctPUB+。
在标准 Base64 编码中,字符 + 和 / 用于表示值 62 和 63。
填充字符 = 用于填补数据长度,使其成为 4 的倍数。

使用字符集 A-Z, a-z, 0-9, -, _ 和 =。
编码后的输出为 eHo_eSQhKiYpKCctPUB-。
在 URL 安全 Base64 编码中,字符 - 和 _ 用于替代标准 Base64 编码中的 + 和 /,以避免在 URL 中需要进行百分比编码。
填充字符 = 同样用于填补数据长度。

使用场景和选择标准

  • 标准 Base64 编码:

适用于大多数一般用途的 Base64 编码。
例如,在电子邮件 MIME 和某些存储格式中使用。

适用于需要在 URL 中安全传输 Base64 编码数据的场景。
例如,在 Web 应用程序中,传输数据通过 URL 参数时,使用 URL 安全 Base64 编码可以避免需要进行额外的百分比编码。

结论

在使用 Base64 编码时,根据不同的需求选择合适的编码方式非常重要。如果编码数据需要在 URL 中传输,使用 URL 安全 Base64 编码可以避免字符 + 和 / 引起的问题。而对于其他用途,标准 Base64 编码则是一个通用的选择。


http://www.ppmy.cn/news/1464301.html

相关文章

【Python编程实践2/3】Python图像处理模块(上)

目录 引言 目标 安装模块 Windows系统 macOS系统 路径 Windows路径 ​编辑macOS路径 windows路径报错 windows路径前的r 示例代码 windows快速查看路径 macOS快速查看路径 打开图片 展示图片 下节预告 总结 引言 欢迎各位大佬垂阅本篇Python实践博客&a…

新手困 ViewModel与Activting的databinding2个对象 区别

在Android开发中,ViewModel与Activity的Binding并不是同一个概念,它们分别指的是不同的功能和用途。 ViewModel: ViewModel是一个为UI界面提供数据的类,它负责管理Activity或Fragment的数据。ViewModel类持有数据的引用,即使配置…

Java基础学习:深入解析Java中的位运算符

在Java中,位运算符用于对整数类型的值进行位运算。以下是Java中的位运算符: 位与(&):两位都为1时,结果为1,否则为0。 位或(|):两位中有1个为1,结果为1。 位非(~):位的反&#…

vs工程添加自定义宏

一、简介 用户可以添加自定义宏变量方便工程路径名称的修改和配置 例:$(SolutionDir) 为解决方案路径,$(PojectDir) 为工程所在路径 测试环境:vs2017,qt5.14.0 二、配置 1、打开属性窗口:视图-》其他窗口-》属性管…

方法的重写--5.29

当子类对父类的方法不满意时,可以进行重写,但是方法名字要与父类一样。 举例,我用people来举例,我是打工人,然后再创一个student类,重写方法我不是打工人,我是读书人。代码如下,发现…

代码随想录第二十二天 | 654.最大二叉树, 617.合并二叉树, 700.二叉搜索树中的搜索, 98. 验证二叉搜索树

654.最大二叉树 看完想法&#xff1a;构造树一般采用的是前序遍历&#xff0c;因为先构造中间节点&#xff0c;然后递归构造左子树和右子树 确定递归函数的参数和返回值:返回TreeNode* 输入vector<int>& num; 确定终止条件:当输入数组大小1的时候&#xff0c;传入数…

vs2013使用qt Linguist以及tr不生效问题

一、qt Linguist&#xff08;语言家&#xff09;步骤流程 1、创建翻译文件,在qt选项中 2.选择对应所需的语言&#xff0c;得到.ts后缀的翻译文件 3.创建.pro文件&#xff0c;并将.ts配置在.pro文件中 3.使用qt Linguist 打开创建好的以.ts为后缀的翻译文件&#xff0c;按图所示…

产品经理-需求收集(二)

1. 什么是需求 指在一定的时期中&#xff0c;一定场景中&#xff0c;无论是心理上还是生理上的&#xff0c;用户有着某种“需要”&#xff0c;这种“需要”用户自己不一定知道的&#xff0c;有了这种“需要”后用户就有做某件事情的动机并促使达到其某种目的&#xff0c;这也就…