代码拉取完成,页面将自动刷新
package util
import (
"bytes"
"fmt"
)
// PKCS#7 填充
//
// @param ciphertext []byte 原始内容
//
// @param blockSize int 数据块分割大小
func PKCS7Padding(ciphertext []byte, blockSize int) ([]byte, error) {
if blockSize <= 0 || blockSize > 255 {
return nil, fmt.Errorf("pkcs7 can padding only (1 ~ 255] bytes. error size: %d", blockSize)
}
// ciphertext 长度是 blockSize 整数倍,则填充 blockSize 个数据
// ciphertext 长度不是 blockSize 整数倍,则填充差额 已确保是整数倍
padding := blockSize - len(ciphertext)%blockSize
// 根据 padding 大小创建 padding 长度,内容为 padding的 []byte
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext...), nil
}
// PKCS#7 去除填充
func PKCS7UnPadding(plantText []byte) ([]byte, error) {
length := len(plantText)
// 获取 最后一个字符内容,最后一个字符即填充的个数
unpadding := int(plantText[length-1])
if unpadding > length {
return nil, fmt.Errorf("unpadding length error: %d", unpadding)
}
return plantText[:(length - unpadding)], nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。