Golang Base64编码解码

Golang内置支持Base64编码解码,Go的encoding/base64包遵照RFC 4648规范实现了base64编码解码功能,包括标准方式以及URL/文件名称安全方式编码。本文通过示例演示如何编码和解码。

1. Base64 标准方式编码解码

RFC 4648规范约定标准Base64对任何二进制数据使用US-ASCII字符子集进行编码,字符包括:A-Z, a-z, 0-9, +, and /

编码示例:

func encode() {data := "hello world12345!?$*&()'-@~"// Base64 Standard EncodingsEnc := base64.StdEncoding.EncodeToString([]byte(data))fmt.Println(sEnc) // aGVsbG8gd29ybGQxMjM0NSE/JComKCknLUB+
}

解码示例:

func decode() {data := "hello world12345!?$*&()'-@~"sEnc := base64.StdEncoding.EncodeToString([]byte(data))// Base64 Standard DecodingsDec, err := base64.StdEncoding.DecodeString(sEnc)if err != nil {fmt.Printf("Error decoding string: %s ", err.Error())return}fmt.Println(string(sDec)) //hello world12345!?$*&()'-@~
}

2. URL和文件名安全编码解码

URL和文件名安全方式是标准方式的变体,其输出用于URL和文件名。因为+/字符是标准Base64字符对URL和文件名编码不安全,变体即使用-代替+_(下划线)代替/

编码示例:

func encode() {data := "hello world12345!?$*&()'-@~"// Base64 Url EncodinguEnc := base64.URLEncoding.EncodeToString([]byte(data))fmt.Println(uEnc) // aGVsbG8gd29ybGQxMjM0NSE_JComKCknLUB-
}

解码示例:

func decode() {data := "hello world12345!?$*&()'-@~"uEnc := base64.URLEncoding.EncodeToString([]byte(data))// Base64 Url DecodinguDec, err := base64.URLEncoding.DecodeString(uEnc)if err != nil {fmt.Printf("Error decoding string: %s ", err.Error())return}fmt.Println(string(uDec)) // "hello world12345!?$*&()'-@~"
}

3. 无填充编码

标准Base64编码对输出结果使用=进行填充。一般也建议使用填充方式,但一些场景无需填充。我们可以使用Raw方式编码即没有填充。

无填充编码示例:

func main() {data := "abc!?$*&()'-@~"// Base64 Encoding without PaddingswEnc := base64.RawStdEncoding.EncodeToString([]byte(data))fmt.Println(swEnc) // YWJjIT8kKiYoKSctQH4// Base64 Url Encoding without PaddinguwEnc := base64.RawURLEncoding.EncodeToString([]byte(data))fmt.Println(uwEnc) //YWJjIT8kKiYoKSctQH4
}

4. 总结

本文介绍了Golang内置支持Base64编码解码,确实很简单、很方便。

Golang Base64编码解码相关推荐

  1. js base64 编码解码

    js base64 编码解码 encode decode,可以直接使用 function Base64() {// private property_keyStr = "ABCDEFGHIJ ...

  2. python使用base64编码解码数据

    python使用base64编码解码数据 base64模块是用来作base64编码解码,常用于小型数据的传输.编码后的数据是一个字符串,其包括a-z.A-Z.0-9./.+共64个字符,即可用6个字节 ...

  3. java svgbase64转byte_java 图片进行base64 编码解码

    java 图片进行base64 编码解码 刘振兴 代码分享 2017年06月07日 10555 2条评论 import sun.misc.BASE64Decoder; import sun.misc. ...

  4. openssl算法 —— 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密

    openssl 加密字符串的方法: 一.利用openssl命令进行BASE64编码解码(base64 encode/decode): 1. BASE64编码命令 对字符串'abc'进行base64编码 ...

  5. Java工程中引用Base64编码解码小记

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一. Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两 ...

  6. Java Base64 编码解码方案总结

    转载自  Java Base64 编码解码方案总结 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应 ...

  7. 一些Base64编码/解码及数据压缩/解压方面的知识

    一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...

  8. Javascript中Base64编码解码的使用实例

    Javascript为我们提供了一个简单的方法来实现字符串的Base64编码和解码,分别是window.btoa()函数和window.atob()函数. 1 var encodedStr = win ...

  9. 原来浏览器原生支持JS Base64编码解码

    原来浏览器原生支持JS Base64编码解码 转载来源:https://www.zhangxinxu.com/wordpress/2018/08/js-base64-atob-btoa-encode- ...

最新文章

  1. Java 内部类及其原理
  2. crt证书linux使用,linux下使用openssl生成https的crt和key证书
  3. python映射类型-什么是python中唯一的映射类型
  4. 为什么要使用 using namespace std
  5. JS排序算法之插入排序
  6. datatable和awk获取列名操作
  7. 测试人生 | 三十而已,何需惧怕 年薪40W+涨薪幅度超40%
  8. Python 字典(dict)操作(update)、翻转字典
  9. STM32F103 驱动DS18B20
  10. [速记] 网络安全复习——选择题汇总
  11. 多功能Win系统维护工具箱
  12. Excel作图-制作复合饼图
  13. 关于考研复习数学分析和高等代数
  14. 音频编码-G.711
  15. 华为模拟器eNSP练习题-静态路由、缺省路由
  16. 上古世纪美服服务器在哪个文件夹,美服《上古世纪》新的封闭测试将Leviathan更新带到中国服务器上...
  17. python期中考试试卷分析_期中考试试卷分析与反思
  18. fedora安装rar解压程序 unrar
  19. JavaSwing_2.6: JTextField(文本框)
  20. 脚本与脚本语言简单介绍

热门文章

  1. R语言——多元数据直观表示
  2. 步进电机定子相数:单相/两相/三相/四相/五相结构工作原理
  3. Error. An error occurred while processing your request.
  4. 微信小程序直播服务器是用的腾讯的,使用微信小程序和腾讯云实现直播功能
  5. 数值分析复化求积matlab,MATLAB数值分析实验二(复合梯形、辛普森和龙贝格求积,以及二重积分计算等)...
  6. 全套BAT大厂面试题整理锦集
  7. 怎样买保险才不会被坑?用亲身经历告诉你!
  8. 读书笔记-财务报表分析的目的
  9. 包包的结构制图_原来可以用R这么画基因结构图
  10. 新闻发布系统——INSERT 语句与 FOREIGN KEY 约束XXX冲突。该冲突发生于数据库XXX,表XXX, column 'XXX。