Go 加密算法工具方法

embedded/2024/11/15 4:08:47/

常用的工具方法:

1.将字节数组转成16进制字符串: []byte -> string

2.将16进制字符串串转成字节数组: hex string -> []byte

3.16进制字符串大端和小端颠倒

4.字节数组大端和小端颠倒

5.哈希函数

package mainimport ("fmt""encoding/hex""crypto/md5""crypto/sha1""crypto/sha256""crypto/sha512""hash"
)/**
* 将字节数组转成16进制字符串串: []byte -> string
*/
func BytesToHexString(arr []byte)string{return hex.EncodeToString(arr)
}/**
* 将16进制字符串串转成字节数组: hex string -> []byte
*/
func HexStringToBytes(s string)([]byte,error){arr,err:=hex.DecodeString(s)return arr,err
}/**
* 16进制字符串串⼤大端和⼩小端颠倒
*/
func ReverseHexString(hexStr string)string{arr,_:=hex.DecodeString(hexStr)ReverseBytes(arr)return hex.EncodeToString(arr)
}/**
* 字节数组⼤大端和⼩小端颠倒
*/
func ReverseBytes(data []byte){for i,j:=0,len(data)-1;i<j;i,j=i+1,j-1{data[i],data[j] = data[j],data[i]}
}//哈希函数
func SHA256HexString(text string)string{sha256Instance:=sha256.New()arr,_:=hex.DecodeString(text)sha256Instance.Write(arr)ciphertext:=sha256Instance.Sum(nil)return fmt.Sprintf("%x",ciphertext)
}func SHA256Double(text string, isHex bool) string {sha256Instance := sha256.New()if isHex {arr, _ := hex.DecodeString(text)sha256Instance.Write(arr)} else {sha256Instance.Write([]byte(text))}hashBytes := sha256Instance.Sum(nil)sha256Instance.Reset()sha256Instance.Write(hashBytes)hashBytes = sha256Instance.Sum(nil)return fmt.Sprintf("%x", hashBytes)
}func HASH(text string,hashType string,isHex bool)string{var hashInstance hash.Hashswitch hashType{//case"md4"://	hashInstance = md4.New()case"md5":hashInstance = md5.New()case"sha1":hashInstance = sha1.New()case"sha256":hashInstance = sha256.New()case"sha512":hashInstance = sha512.New()//case"ripemd160"://	hashInstance = ripemd160.New()}if isHex{arr,_:=hex.DecodeString(text)hashInstance.Write(arr)}else{hashInstance.Write([]byte(text))}ciphertext := hashInstance.Sum(nil)fmt.Println("密文: ",ciphertext)return fmt.Sprint("%x",ciphertext)
} func main(){text := "我喜欢Go语音!"fmt.Println("原文:",text)//HASH(text,"md4",true)HASH(text,"md5",false)HASH(text,"sha1",true)HASH(text,"sha256",false)HASH(text,"sha512",true)//HASH(text,"ripemd160",false)
}go run tools.go
原文: 我喜欢Go语音!
md5 密文:  [79 87 231 27 94 192 19 127 81 189 27 146 112 219 94 70]
sha1 密文:  [218 57 163 238 94 107 75 13 50 85 191 239 149 96 24 144 175 216 7 9]
sha256 密文:  [39 69 16 138 163 59 95 127 162 53 253 71 127 168 89 182 123 62 97 22 150 164 44 59 59 180 246 238 86 117 129 92]
sha512 密文:  [207 131 225 53 126 239 184 189 241 84 40 80 214 109 128 7 214 32 228 5 11 87 21 220 131 244 169 33 211 108 233 206 71 208 209 60 93 133 242 176 255 131 24 210 135 126 236 47 99 185 49 189 71 65 122 129 165 56 50 122 249 39 218 62]

6.填充函数

//填充函数
//对称加密需要的填充函数
func PKCS5Padding(data []byte,blockSize int)[]byte{padding := blockSize - len(data)%blockSizepadtext := bytes.Repeat([]byte{byte(padding)},padding)return append(data,padtext...)
}func PKCS5UnPadding(data []byte) []byte {length := len(data)//去掉最后一个字节 unpadding 次unpadding := int(data[length-1])return data[:(length - unpadding)]
}func ZeroPadding(data []byte, blockSize int) []byte {padding := blockSize - len(data)%blockSizepadtext := bytes.Repeat([]byte{0}, padding)return append(data, padtext...)
}func ZeroUnPadding(data []byte) []byte {return bytes.TrimRightFunc(data, func(r rune) bool {return r == rune(0)})
}


http://www.ppmy.cn/embedded/137669.html

相关文章

单网页图库应用Single File PHP Gallery

什么是 Single File PHP Gallery &#xff1f; Single File PHP Gallery 是一个基于单个 PHP 文件的网页图库。您只需将该脚本复制到任何包含图像的目录&#xff0c;即可创建图库。子目录将作为子图库。图像和目录的缩略图会自动生成。使用 Single File PHP Gallery 无需任何配…

正向代理服务器

1 概念 1.1 正向代理概念 正向代理是一个位于客户端和目标服务器之间的代理服务器&#xff08;中间服务器&#xff09;。为了从目标服务器取得内容&#xff0c;客户端向代理服务器发送一个请求&#xff0c;并且指定目标服务器&#xff0c;之后代理向目标服务器转发请求&#…

sql server 查看io资源使用

USE AdventureWorks2022; GO SET STATISTICS IO ON; GO SELECT * FROM Production.ProductCostHistory WHERE StandardCost < 500.00; GO SET STATISTICS IO OFF; GO 如果输出physical reads 或者 read-ahead reads 大于0 &#xff0c;则表示有物…

uni-app表格带分页,后端处理过每页显示多少条

uni-app表格带分页&#xff0c;后端处理过每页可以显示多少条&#xff0c;一句设置好了每页显示的数据量&#xff0c;不需要钱的在进行操作&#xff0c;在进行对数据的截取 <th-table :column"column" :listData"data" :checkSort"checkSort"…

spring gateway 动态路由

##yml配置 spring:application:name: public-gateway # cloud: # gateway: # routes: # - id: mybatis-plus-test # 路由的唯一标识 # uri: http://192.168.3.188:9898 # 目标服务的地址 # predicates: # - Path/test/** # 匹配…

假设检验——基于Python实现

第 7 章——假设检验 7.1 假设检验的原理 7.2 总体均值的检验 【例7-3】——一个 总体均值的检验——大样本 【代码框7-1】——一个 总体均值的检验——大样本 # 一个总体均值的检验(大样本) import pandas as pd from statsmodels.stats.weightstats import ztest exa…

LuaJIT源码分析(六)语法分析

LuaJIT源码分析&#xff08;六&#xff09;语法分析 lua虚拟机在编译lua脚本时&#xff0c;在对源代码进行词法分析之后&#xff0c;还需要进行语法分析&#xff0c;把源代码翻译成字节码。lua 5.1完整的语法描述如下&#xff1a; LuaJIT采用的是递归下降的解析方式&#xff0c…

前端呈现效果:鱼眼相机城市环境图像分割

鱼眼相机城市环境图像分割系统源码&#xff06;数据集分享 [yolov8-seg-SPDConv&#xff06;yolov8-seg-vanillanet等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI G…