解密去除填充长度时超出切片范围

来源:11-4 服务端cookie身份验证

可爱的大ju

2020-08-22

经过断点发现下面这部分代码报错: http: panic serving [::1]:49570: runtime error: slice bounds out of range [:-78]

func PKCS7UnPadding(origData []byte) ([]byte,error){
	//获取数据长度
	length := len(origData)
	//fmt.Println("长度为:",length)
	if length==0{
		return nil,errors.New("加密字符串错误!")
	}else{
		//获取填充字符串长度,aes加密的时候会把加密字符串长度附属在加密串上。因为最后一位存储的是填充的字符,同时其大小也是填充的位数
		unpadding := int(origData[length-1])
		//fmt.Println("origData:",origData)
		//fmt.Println("unpadding长度:",unpadding)
		//截取切片,删除填充字节,返回明文。
		return origData[:(length-unpadding)],nil
	}
	
}

输出发现origData长度为16,而unpadding填充长度为94
origData: [61 240 162 136 251 122 234 234 28 219 43 129 171 76 216 94]
unpadding长度: 94
比对了代码没发现不一样,不知道是哪里出错了。。。

写回答

1回答

Cap

2020-08-27

代码用编辑器 比对下。

0
0

全流程开发 GO实战电商网站高并发秒杀系统

运用架构设计与系统化思维,从容应对不同流量等级的“秒杀”场景

1462 学习 · 443 问题

查看课程