package helper import ( "log" lzstring "github.com/daku10/go-lz-string" ) // StringDecrypt - langsung coba decompress tanpa decrypt ulang func StringDecrypt(key string, encryptedString string) (string, error) { log.Printf("StringDecrypt: Attempting decompression, data length: %d", len(encryptedString)) // Method 1: Try direct LZ-string decompression (data sudah didecrypt di response.go) if result, err := lzstring.DecompressFromEncodedURIComponent(encryptedString); err == nil && len(result) > 0 { log.Printf("StringDecrypt: Direct decompression successful") return result, nil } // Method 2: Try other LZ-string methods if result, err := lzstring.DecompressFromBase64(encryptedString); err == nil && len(result) > 0 { log.Printf("StringDecrypt: Base64 decompression successful") return result, nil } // Method 3: If all fail, return the original string log.Printf("StringDecrypt: All decompression failed, returning original data") return encryptedString, nil } func RemovePKCS7Padding(data []byte) []byte { if len(data) == 0 { return data } paddingLength := int(data[len(data)-1]) // Validasi padding length if paddingLength > len(data) || paddingLength == 0 || paddingLength > 16 { log.Printf("RemovePKCS7Padding: Invalid padding length: %d, data length: %d", paddingLength, len(data)) // 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 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, expected %d, got %d", i, paddingLength, data[i]) // Jika padding tidak valid, coba cari padding yang benar return findValidPadding(data) } } 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 }