1 Star 0 Fork 0

igo/pkg

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
secret.go 3.02 KB
一键复制 编辑 原始数据 按行查看 历史
layte.xiao 提交于 2023-12-09 19:02 . 加密
package xutils
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"crypto/md5"
"crypto/sha1"
"encoding/base64"
"encoding/hex"
"hash/crc32"
"io/ioutil"
"os"
)
// Md5 md5()
func Md5(str string) string {
hash := md5.New()
hash.Write([]byte(str))
return hex.EncodeToString(hash.Sum(nil))
}
// Md5File md5_file()
func Md5File(path string) (string, error) {
f, err := os.Open(path)
if err != nil {
return "", err
}
defer f.Close()
fi, err := f.Stat()
if err != nil {
return "", err
}
var size int64 = 1048576 // 1M
hash := md5.New()
if fi.Size() < size {
data, err := ioutil.ReadFile(path)
if err != nil {
return "", err
}
hash.Write(data)
} else {
b := make([]byte, size)
for {
n, err := f.Read(b)
if err != nil {
break
}
hash.Write(b[:n])
}
}
return hex.EncodeToString(hash.Sum(nil)), nil
}
// Sha1 sha1()
func Sha1(str string) string {
hash := sha1.New()
hash.Write([]byte(str))
return hex.EncodeToString(hash.Sum(nil))
}
// Sha1File sha1_file()
func Sha1File(path string) (string, error) {
data, err := ioutil.ReadFile(path)
if err != nil {
return "", err
}
hash := sha1.New()
hash.Write([]byte(data))
return hex.EncodeToString(hash.Sum(nil)), nil
}
// Crc32 crc32()
func Crc32(str string) uint32 {
return crc32.ChecksumIEEE([]byte(str))
}
func Base64Encode(str string) string {
return base64.StdEncoding.EncodeToString([]byte(str))
}
func Base64Decode(str string) (string, error) {
b, err := base64.StdEncoding.DecodeString(str)
if err != nil {
return "", err
}
return string(b), err
}
func AesEncryptCBC(origData []byte, key []byte) (encrypted []byte) {
// 分组秘钥
// NewCipher该函数限制了输入k的长度必须为16, 24或者32
block, _ := aes.NewCipher(key)
blockSize := block.BlockSize() // 获取秘钥块的长度
origData = pkcs5Padding(origData, blockSize) // 补全码
blockMode := cipher.NewCBCEncrypter(block, key[:blockSize]) // 加密模式
encrypted = make([]byte, len(origData)) // 创建数组
blockMode.CryptBlocks(encrypted, origData) // 加密
return encrypted
}
func AesDecryptCBC(encrypted []byte, key []byte) (decrypted []byte) {
block, _ := aes.NewCipher(key) // 分组秘钥
blockSize := block.BlockSize() // 获取秘钥块的长度
blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) // 加密模式
decrypted = make([]byte, len(encrypted)) // 创建数组
blockMode.CryptBlocks(decrypted, encrypted) // 解密
decrypted = pkcs5UnPadding(decrypted) // 去除补全码
return decrypted
}
func pkcs5UnPadding(origData []byte) []byte {
length := len(origData)
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}
func pkcs5Padding(ciphertext []byte, blockSize int) []byte {
padding := blockSize - len(ciphertext)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext...)
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/igolang/pkg.git
git@gitee.com:igolang/pkg.git
igolang
pkg
pkg
v1.25.3

搜索帮助