perbaikan response

This commit is contained in:
2025-09-10 21:31:31 +07:00
parent 7d03b5d5ef
commit 87b69ddb29
5 changed files with 1079 additions and 87 deletions

View File

@@ -33,18 +33,51 @@ func RemovePKCS7Padding(data []byte) []byte {
}
paddingLength := int(data[len(data)-1])
if paddingLength > len(data) || paddingLength == 0 {
// Validasi padding length
if paddingLength > len(data) || paddingLength == 0 || paddingLength > 16 {
log.Printf("RemovePKCS7Padding: Invalid padding length: %d, data length: %d", paddingLength, len(data))
return data // Return original data if padding is invalid
// Coba kembalikan data tanpa byte terakhir jika padding tampak salah
if len(data) > 1 {
return data[:len(data)-1]
}
return data
}
// Verify all padding bytes are correct
for i := len(data) - paddingLength; i < len(data); i++ {
paddingStart := len(data) - paddingLength
for i := paddingStart; i < len(data); i++ {
if data[i] != byte(paddingLength) {
log.Printf("RemovePKCS7Padding: Invalid padding byte at position %d", i)
return data // Return original data if padding is invalid
log.Printf("RemovePKCS7Padding: Invalid padding byte at position %d, expected %d, got %d", i, paddingLength, data[i])
// Jika padding tidak valid, coba cari padding yang benar
return findValidPadding(data)
}
}
return data[:len(data)-paddingLength]
result := data[:paddingStart]
log.Printf("RemovePKCS7Padding: Successfully removed %d padding bytes", paddingLength)
return result
}
// Fungsi baru untuk mencari padding yang valid
func findValidPadding(data []byte) []byte {
dataLen := len(data)
// Coba berbagai kemungkinan padding length (1-16)
for padLen := 1; padLen <= 16 && padLen <= dataLen; padLen++ {
valid := true
for i := dataLen - padLen; i < dataLen; i++ {
if data[i] != byte(padLen) {
valid = false
break
}
}
if valid {
log.Printf("RemovePKCS7Padding: Found valid padding of length %d", padLen)
return data[:dataLen-padLen]
}
}
log.Printf("RemovePKCS7Padding: No valid padding found, returning original data")
return data
}