1 Star 0 Fork 0

filters/utils

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
cbc.go 1.62 KB
一键复制 编辑 原始数据 按行查看 历史
sourcandy 提交于 2024-10-26 19:27 +08:00 . 更新jwt
package crypt
import (
"crypto/aes"
"crypto/cipher"
"encoding/base64"
)
// CbcCrypt ...
type CbcCrypt struct {
key string
}
// SetCryptKey ...
func (c *CbcCrypt) SetCryptKey(key string) error {
c.key = key
return nil
}
// ExistCryptKey ...
func (c *CbcCrypt) ExistCryptKey() bool {
if c.key != "" {
return true
}
return false
}
// Encrypt 加密
func (c *CbcCrypt) Encrypt(data []byte) (string,error) {
if !c.ExistCryptKey() {
return "", CryptKeynotFound
}
// 转成字节数组
k := []byte(c.key)
// 分组秘钥
// NewCipher该函数限制了输入k的长度必须为16, 24或者32
block, err := aes.NewCipher(k)
if err !=nil {
return "", err
}
// 获取秘钥块的长度
blockSize := block.BlockSize()
// 补全码
data = PKCS7Padding(data, blockSize)
// 加密模式
blockMode := cipher.NewCBCEncrypter(block, k[:blockSize])
// 创建数组
cryted := make([]byte, len(data))
// 加密
blockMode.CryptBlocks(cryted, data)
return base64.StdEncoding.EncodeToString(cryted),nil
}
// Decrypt 解密
func (c *CbcCrypt) Decrypt(data string) (interface{},error) {
if !c.ExistCryptKey() {
return nil, CryptKeynotFound
}
// 转成字节数组
crytedByte, err := base64.StdEncoding.DecodeString(data)
if err !=nil {
return nil, err
}
k := []byte(c.key)
// 分组秘钥
block, _ := aes.NewCipher(k)
// 获取秘钥块的长度
blockSize := block.BlockSize()
// 加密模式
blockMode := cipher.NewCBCDecrypter(block, k[:blockSize])
// 创建数组
orig := make([]byte, len(crytedByte))
// 解密
blockMode.CryptBlocks(orig, crytedByte)
// 去补全码
orig = PKCS7UnPadding(orig)
return orig,nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/filters/utils.git
git@gitee.com:filters/utils.git
filters
utils
utils
master

搜索帮助