feat(encrypt):增加通用的数据填充处理。
This commit is contained in:
parent
4229c1a7a5
commit
5216a57797
2
encryption/encryption.go
Normal file
2
encryption/encryption.go
Normal file
|
@ -0,0 +1,2 @@
|
|||
// 提供用于支持加解密算法的基础功能函数。
|
||||
package encryption
|
48
encryption/padding.go
Normal file
48
encryption/padding.go
Normal 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)
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user