package aes
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"encoding/base64"
)
// 加密 aes-128-cbc
func Encrypt(key string, iv string, str string) (string, error) {
encodeKey := []byte(key)
encodeIv := []byte(iv)
encodeStr := []byte(str)
//获取block块
block, err := aes.NewCipher(encodeKey)
if err != nil {
return "", err
}
//补码
encodeStr = PKCS7Padding(encodeStr, block.BlockSize())
//加密模式
blockMode := cipher.NewCBCEncrypter(block, encodeIv)
//创建明文长度的数组
dCrypts := make([]byte, len(encodeStr))
//加密明文
blockMode.CryptBlocks(dCrypts, encodeStr)
return base64.StdEncoding.EncodeToString(dCrypts), nil
}
//补码
func PKCS7Padding(origData []byte, blockSize int) []byte {
//计算需要补几位数
padding := blockSize - len(origData)%blockSize
//在切片后面追加char数量的byte(char)
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(origData, padtext...)
}
func Decrypt(key string, iv string, str string) (string, error) {
decodeKey := []byte(key)
decodeIv := []byte(iv)
strByte, err := base64.StdEncoding.DecodeString(str)
if err != nil {
return "", err
}
//获取block块
block, err := aes.NewCipher(decodeKey)
if err != nil {
return "", err
}
//解密模式
blockMode := cipher.NewCBCDecrypter(block, decodeIv)
//创建明文长度的数组
decrypted := make([]byte, len(strByte))
//加密明文
blockMode.CryptBlocks(decrypted, strByte)
//去掉字符
decrypted = PKCS7upPadding(decrypted)
return string(decrypted), nil
}
// 去掉字符
func PKCS7upPadding(origData []byte) []byte {
length := len(origData)
unPadding := int(origData[length-1])
return origData[:(length - unPadding)]
}
go 实现res 加密解密
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...