1 Star 0 Fork 0

zhxlp/golang-study

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
crypto.go 1.09 KB
一键复制 编辑 原始数据 按行查看 历史
zhxlp 提交于 2022-09-04 17:26 +08:00 . 文档格式更新
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
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/zhxlp/golang-study.git
git@gitee.com:zhxlp/golang-study.git
zhxlp
golang-study
golang-study
b6f57e10b84f

搜索帮助