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
View File
@@ -0,0 +1,2 @@
// 提供用于支持加解密算法的基础功能函数。
package encryption
+48
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)
})
}
}