文章目录

  • 1.前言
  • 2.Base64 编码
    • 2.1 Base64 标准方式编码解码
    • 2.2 URL和文件名安全编码解码
    • 2.3 无填充编码
  • 3.SHA256加密

1.前言

JWT的生成规范中常用到Base64 URL编码和SHA256加密算法,好消息是Golang原生包提供了对应的实现。

2.Base64 编码

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

2.1 Base64 标准方式编码解码

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

func main() {data := "hello world12345!?$*&()'-@~"// Base64 Standard EncodingsEnc := base64.StdEncoding.EncodeToString([]byte(data))fmt.Println(sEnc) // aGVsbG8gd29ybGQxMjM0NSE/JComKCknLUB+// 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.2 URL和文件名安全编码解码

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

func main() {data := "hello world12345!?$*&()'-@~"// Base64 Url EncodinguEnc := base64.URLEncoding.EncodeToString([]byte(data))fmt.Println(uEnc) // aGVsbG8gd29ybGQxMjM0NSE_JComKCknLUB-// 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!?$*&()'-@~"
}

2.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
}

3.SHA256加密

hmac是Hash-based Message Authentication Code的简写,就是指哈希消息认证码,包含有很多种哈希加密算法,sha256是其中一种。

package mainimport ("crypto/hmac""crypto/sha256""encoding/base64""encoding/hex""fmt"
)func main() {secret  := "hezebin"message := "hello world!"h := hmac.New(sha256.New, []byte(secret))h.Write([]byte(message))fmt.Println(base64.URLEncoding.EncodeToString(h.Sum(nil)))
}

注意:计算hamc_sha256时,是否需要转成十六进制,取决于自己的需要:

hex.EncodeToString(h.Sum(nil))

Golang实现SHA256加密和Base64编码相关推荐

  1. java sha256加密后base64编码

    java sha256加密后base64编码 /*** 获取签名** @param str 加密前的字符串* @return 加密后的字符串*/private String getSign(Strin ...

  2. 前端DES加密、base64编码,后端DES解密、base64解码

    项目场景: 在系统开发的过程中有的时候,我们为了数据的安全性会把前端的数据进行加密,然后再在后端程序中对加密数据进行解密或解密,今天我们就在这里说2种简单的方法(DES加密.base64编码) 具体实 ...

  3. linux中常用的加密总结--base64编码解码与openssl实现

    linux中常用的加密总结–base64编码解码与openssl实现 一.base64 !!!base64是一种数据编码方式,可逆,不是严格意义上的加密算法,不能作为安全加密使用 -d,–decode ...

  4. openssl的AES加密(base64编码)

    openssl的AES加密(base64编码) [ base64编码/解码 ] AES加密后为乱码,使用base64编码后显示正常 /********************************* ...

  5. 【Golang】golang实现sha256加密函数

    golang实现sha256加密函数 //Sha256加密 func Sha256(src string) string {m := sha256.New()m.Write([]byte(src))r ...

  6. golang中图片转base64_golang base64编码

    1.stdEncoding:标准的base64编码 type Encoding struct { encode [64]byte decodeMap [256]byte padChar rune st ...

  7. Golang 实现sha256 加密

    先贴出PHP代码: $string = "1234"; $key = "abcd"; $signature = hash_hmac('sha256', $str ...

  8. vue前后端aes url传参解密再解base64编码

    需求:我们公司做机票订购服务,有自己的平台的订单,也有第三方网站向我们网站导入的用户订单,第三方导入的是通过url传参的方式导入.url会携带用户的相关信息. url里面的参数是经过aes加密和bas ...

  9. base64编码 vba_【VBA研究】如何用Base64 编解码方法实现简单的加解密

    Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码,将数据变成字符串实现文本传输.由于编码简单,所以很容易实现,代码也是现成的.利用这个编码规则可以实现简单的加解密.编解码方 ...

最新文章

  1. adc量化单位_单片机外围模块漫谈之二,如何提高ADC转换精度
  2. ASP.NET4.0中客户端ID的生成
  3. angular2 学习二 最简单的模板
  4. midi api java_Java声音api – 扫描MIDI设备
  5. 【php】命名空间的影响
  6. 密织“地网” 南充“试水”智慧安防
  7. hadoop本地模式部署_hadoop启动模式、基本配置、启动方式
  8. Spring--@within和@target的区别
  9. 一维卷积详细解释(转载+自己笔记)
  10. Vue框架之条件与循环的使用
  11. C++学习:第一章 开始
  12. 图论算法及其matlab实现_BLDC有感FOC算法理论及其STM32软硬件实现
  13. 四川理工计算机专业好不好,急!!!!四川理工 、 宜宾学院 、 内江师范学院 哪个学校计算机专业好点?...
  14. 支付宝之小鸡拍球游戏(C++)
  15. 7-13 大家一起来玩游戏 (20 分)
  16. 无法验证驱动程序的签名_无法验证应用?掉签名打不开应用?没越狱也能解决!...
  17. 秀米 ueditor 远程抓图到本地 问题结合
  18. 51nod 1123 X^A Mod B 问题
  19. Python简单详细使用教程
  20. Calico集成kubernetes的CNI网络部署全过程、启用CA自签名

热门文章

  1. Jquery介绍及学习视频
  2. java-net-php-python-ssm二级学院学生会人事管理信息系统计算机毕业设计程序
  3. java 添加空格方法_java 各种去空格的方法
  4. 软件开发者的精力管理(一)
  5. 解决Outlook不能打开的问题
  6. 数学建模(五):图与网络模型
  7. 业务中立_网络中立性的终结了吗?
  8. android开发笔记之Makefile(一)
  9. 手机记事内容怎么同步到电脑上?
  10. 新视野大学英语听说教程4答案