🔧 chore: 初始化番茄小说 API 项目结构
新增项目基础框架,包含核心 API 实现、算法模块、HTTP 处理器等完整功能模块
This commit is contained in:
commit
6981148727
107 files changed
+12463
No files matched your search
@@ -0,0 +1,78 @@
|
||||
package algos
|
||||
|
||||
// PKCS7DataLength 获取PKCS7填充数据的实际长度
|
||||
func PKCS7DataLength(buffer []byte, bufferSize, modulus int) int {
|
||||
if bufferSize%modulus != 0 || bufferSize < modulus {
|
||||
return 0
|
||||
}
|
||||
|
||||
paddingValue := buffer[bufferSize-1]
|
||||
if paddingValue < 1 || int(paddingValue) > modulus {
|
||||
return 0
|
||||
}
|
||||
|
||||
if bufferSize < int(paddingValue)+1 {
|
||||
return 0
|
||||
}
|
||||
|
||||
count := 1
|
||||
bufferSize--
|
||||
|
||||
for i := count; i < int(paddingValue); i++ {
|
||||
bufferSize--
|
||||
if buffer[bufferSize] != paddingValue {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
return bufferSize
|
||||
}
|
||||
|
||||
// PKCS7PadBuffer 对缓冲区进行PKCS7填充
|
||||
func PKCS7PadBuffer(buffer []byte, dataLength, bufferSize, modulus int) int {
|
||||
padByte := modulus - (dataLength % modulus)
|
||||
if dataLength+padByte > bufferSize {
|
||||
return -padByte
|
||||
}
|
||||
|
||||
for i := 0; i < padByte; i++ {
|
||||
buffer[dataLength+i] = byte(padByte)
|
||||
}
|
||||
|
||||
return padByte
|
||||
}
|
||||
|
||||
// PaddingSize 计算填充后的大小
|
||||
func PaddingSize(size int) int {
|
||||
mod := size % 16
|
||||
if mod > 0 {
|
||||
return size + (16 - mod)
|
||||
}
|
||||
return size
|
||||
}
|
||||
|
||||
// RemovePKCS7Padding 移除PKCS7填充
|
||||
func RemovePKCS7Padding(data []byte) []byte {
|
||||
length := len(data)
|
||||
if length == 0 {
|
||||
return data
|
||||
}
|
||||
|
||||
paddingLen := int(data[length-1])
|
||||
if paddingLen > length || paddingLen > 16 {
|
||||
return data
|
||||
}
|
||||
|
||||
return data[:length-paddingLen]
|
||||
}
|
||||
|
||||
// AddPKCS7Padding 添加PKCS7填充
|
||||
func AddPKCS7Padding(data []byte, blockSize int) []byte {
|
||||
padding := blockSize - len(data)%blockSize
|
||||
padText := make([]byte, padding)
|
||||
for i := range padText {
|
||||
padText[i] = byte(padding)
|
||||
}
|
||||
return append(data, padText...)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user