You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言AES解密后含冗余字符,如何去除?

解决Go中AES-CBC解密后冗余字符问题

你的问题出在填充处理上:JavaScript(比如Node.js的crypto模块)默认使用PKCS7填充来满足AES-CBC的块大小要求,但Go标准库的CryptBlocks只负责解密数据,不会自动移除这些填充字节,所以解密后出现的冗余字符就是填充内容。

解决方案:手动移除PKCS7填充

添加一个PKCS7去填充的函数,解密后用它处理结果即可。

修改后的完整代码:

package main

import (
	"crypto/aes"
	"crypto/cipher"
	"encoding/hex"
	"errors"
	"fmt"
)

// pkcs7Unpadding 移除PKCS7填充
func pkcs7Unpadding(data []byte) ([]byte, error) {
	length := len(data)
	if length == 0 {
		return nil, errors.New("加密数据为空")
	}
	// 获取填充的长度
	paddingLen := int(data[length-1])
	// 验证填充是否合法
	if paddingLen > length || paddingLen == 0 {
		return nil, errors.New("无效的填充")
	}
	// 检查所有填充字节是否符合要求
	for i := length - paddingLen; i < length; i++ {
		if data[i] != byte(paddingLen) {
			return nil, errors.New("填充验证失败")
		}
	}
	// 移除填充
	return data[:length-paddingLen], nil
}

func main() {
	encKey := "c38036f65157cb6db0e8fd855aa28ada074be71917d1c8eedc2ae4d85e3c9da6"
	iv := "79b67e539e7fcaefa7abf167de5c06ed"
	cipherText := "c02eccfc514a0b7fae830586dd56e0fcebb81fc49f41fa6dedf099c3645793bef7ec7075eca30063f9c0ef395d5ee2d44e4f3490114280abb7cf86d6eb525e2ec9bd2b781388986480f8b3df95f7b10e"

	encKeyDecoded, err := hex.DecodeString(encKey)
	if err != nil {
		panic(err)
	}
	cipherTextDecoded, err := hex.DecodeString(cipherText)
	if err != nil {
		panic(err)
	}
	ivDecoded, err := hex.DecodeString(iv)
	if err != nil {
		panic(err)
	}
	block, err := aes.NewCipher(encKeyDecoded)
	if err != nil {
		panic(err)
	}

	mode := cipher.NewCBCDecrypter(block, ivDecoded)
	mode.CryptBlocks(cipherTextDecoded, cipherTextDecoded)

	// 移除PKCS7填充
	plainText, err := pkcs7Unpadding(cipherTextDecoded)
	if err != nil {
		panic(err)
	}

	fmt.Println(string(plainText))
}

关键说明

  • pkcs7Unpadding函数会先验证填充的合法性(避免恶意数据或损坏数据导致错误),然后移除填充字节。
  • 执行后会输出干净的结果:session={"user":{"email":"ishanjain28@gmail.com","username":"ishanjain28"}}

内容的提问来源于stack exchange,提问作者Chandrama Dessai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:02:38