feat(encrypt):增加通用的数据填充处理。

This commit is contained in:
徐涛 2023-07-12 22:55:12 +08:00
parent 4229c1a7a5
commit 5216a57797
2 changed files with 50 additions and 0 deletions

2
encryption/encryption.go Normal file
View File

@ -0,0 +1,2 @@
// 提供用于支持加解密算法的基础功能函数。
package encryption

48
encryption/padding.go Normal file
View File

@ -0,0 +1,48 @@
package encryption
import "bytes"
const (
NoPadding = iota
ZeroPadding
PKCS7Padding
)
// 对给定的数据进行填充默认采用填充零的方式ZeroPadding也可以采用填充PKCS#7的方式PKCS7Padding或者不填充NoPadding
func Padding(data []byte, blockSize int, padding ...int) []byte {
paddingMethod := append(padding, ZeroPadding)[0]
n := blockSize - len(data)%blockSize
switch paddingMethod {
case PKCS7Padding:
pad := bytes.Repeat([]byte{byte(n)}, n)
return append(data, pad...)
case NoPadding:
return data
case ZeroPadding:
fallthrough
default:
if n == 0 {
return data
}
return append(data, bytes.Repeat([]byte{0}, n)...)
}
}
// 对给定的数据进行去填充默认采用去填充零的方式对应ZeroPadding也可以采用去填充PKCS#7的方式对应PKCS7Padding或者不填充对应NoPadding
func Unpadding(data []byte, padding ...int) []byte {
paddingMethod := append(padding, ZeroPadding)[0]
switch paddingMethod {
case PKCS7Padding:
length := len(data)
unpadding := int(data[length-1])
return data[:(length - unpadding)]
case NoPadding:
return data
case ZeroPadding:
fallthrough
default:
return bytes.TrimRightFunc(data, func(r rune) bool {
return r == rune(0)
})
}
}