//aes解密,cbc模式,PKCS5Padding补码
func AesDecrypt(message string) (result string, err error) {
result = ""
defer func() {
// 捕捉错误
if r := recover(); r != nil {
err = fmt.Errorf("error: %v", r)
}
}()
// 使用base64解码我们提供的数据
data, _ := base64.StdEncoding.DecodeString(message)
key, _ := hex.DecodeString("96B6715EF50FA4557F6CF977178E86C9")
iv, _ := hex.DecodeString("11C500740BE44D4EE5BDAED03CE76FFF")
block, err := aes.NewCipher(key)
if err != nil {
return result, err
}
mode := cipher.NewCBCDecrypter(block, iv)
padded := make([]byte, len(data))
mode.CryptBlocks(padded, data)
length := len(padded)
unpadding := int(padded[length-1])
if length-unpadding < 0 {
return result, err
}
result = gconv.String(padded[:length-unpadding])
return result, nil
}
//aes加密,cbc模式,PKCS5Padding补码
func AesEncrypt(message string) (result string, err error) {
result = ""
defer func() {
// 捕捉错误
if r := recover(); r != nil {
err = fmt.Errorf("error: %v", r)
}
}()
key, _ := hex.DecodeString("96B6715EF50FA4557F6CF977178E86C9")
iv, _ := hex.DecodeString("11C500740BE44D4EE5BDAED03CE76FFF")
encodeBytes := []byte(message)
//根据key 生成密文
block, err := aes.NewCipher(key)
if err != nil {
return result,err
}
//填充
blockSize := block.BlockSize()
encodeBytes = PKCS5Padding(encodeBytes, blockSize)
//加密
blockMode := cipher.NewCBCEncrypter(block, iv)
crypted := make([]byte, len(encodeBytes))
blockMode.CryptBlocks(crypted, encodeBytes)
//转为base64
result = base64.StdEncoding.EncodeToString(crypted)+"#kdsjafjalsdjg#170"
return result, nil
}
func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
//填充
padding := blockSize - len(ciphertext)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext...)
}
golang aes-256-cbc 加解密
于 2023-06-27 09:26:33 首次发布