Golang实现SHA256加密和Base64编码
文章目录
- 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编码相关推荐
- java sha256加密后base64编码
java sha256加密后base64编码 /*** 获取签名** @param str 加密前的字符串* @return 加密后的字符串*/private String getSign(Strin ...
- 前端DES加密、base64编码,后端DES解密、base64解码
项目场景: 在系统开发的过程中有的时候,我们为了数据的安全性会把前端的数据进行加密,然后再在后端程序中对加密数据进行解密或解密,今天我们就在这里说2种简单的方法(DES加密.base64编码) 具体实 ...
- linux中常用的加密总结--base64编码解码与openssl实现
linux中常用的加密总结–base64编码解码与openssl实现 一.base64 !!!base64是一种数据编码方式,可逆,不是严格意义上的加密算法,不能作为安全加密使用 -d,–decode ...
- openssl的AES加密(base64编码)
openssl的AES加密(base64编码) [ base64编码/解码 ] AES加密后为乱码,使用base64编码后显示正常 /********************************* ...
- 【Golang】golang实现sha256加密函数
golang实现sha256加密函数 //Sha256加密 func Sha256(src string) string {m := sha256.New()m.Write([]byte(src))r ...
- golang中图片转base64_golang base64编码
1.stdEncoding:标准的base64编码 type Encoding struct { encode [64]byte decodeMap [256]byte padChar rune st ...
- Golang 实现sha256 加密
先贴出PHP代码: $string = "1234"; $key = "abcd"; $signature = hash_hmac('sha256', $str ...
- vue前后端aes url传参解密再解base64编码
需求:我们公司做机票订购服务,有自己的平台的订单,也有第三方网站向我们网站导入的用户订单,第三方导入的是通过url传参的方式导入.url会携带用户的相关信息. url里面的参数是经过aes加密和bas ...
- base64编码 vba_【VBA研究】如何用Base64 编解码方法实现简单的加解密
Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码,将数据变成字符串实现文本传输.由于编码简单,所以很容易实现,代码也是现成的.利用这个编码规则可以实现简单的加解密.编解码方 ...
最新文章
- adc量化单位_单片机外围模块漫谈之二,如何提高ADC转换精度
- ASP.NET4.0中客户端ID的生成
- angular2 学习二 最简单的模板
- midi api java_Java声音api – 扫描MIDI设备
- 【php】命名空间的影响
- 密织“地网” 南充“试水”智慧安防
- hadoop本地模式部署_hadoop启动模式、基本配置、启动方式
- Spring--@within和@target的区别
- 一维卷积详细解释(转载+自己笔记)
- Vue框架之条件与循环的使用
- C++学习:第一章 开始
- 图论算法及其matlab实现_BLDC有感FOC算法理论及其STM32软硬件实现
- 四川理工计算机专业好不好,急!!!!四川理工 、 宜宾学院 、 内江师范学院 哪个学校计算机专业好点?...
- 支付宝之小鸡拍球游戏(C++)
- 7-13 大家一起来玩游戏 (20 分)
- 无法验证驱动程序的签名_无法验证应用?掉签名打不开应用?没越狱也能解决!...
- 秀米 ueditor 远程抓图到本地 问题结合
- 51nod 1123 X^A Mod B 问题
- Python简单详细使用教程
- Calico集成kubernetes的CNI网络部署全过程、启用CA自签名