first commit
This commit is contained in:
No files matched your search
@@ -0,0 +1,83 @@
|
||||
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
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package helper
|
||||
|
||||
import "errors"
|
||||
|
||||
func Pad(buf []byte, size int) ([]byte, error) {
|
||||
bufLen := len(buf)
|
||||
padLen := size - bufLen%size
|
||||
padded := make([]byte, bufLen+padLen)
|
||||
copy(padded, buf)
|
||||
for i := 0; i < padLen; i++ {
|
||||
padded[bufLen+i] = byte(padLen)
|
||||
}
|
||||
return padded, nil
|
||||
}
|
||||
|
||||
func Unpad(padded []byte, size int) ([]byte, error) {
|
||||
if len(padded)%size != 0 {
|
||||
return nil, errors.New("pkcs7: Padded value wasn't in correct size.")
|
||||
}
|
||||
|
||||
bufLen := len(padded) - int(padded[len(padded)-1])
|
||||
buf := make([]byte, bufLen)
|
||||
copy(buf, padded[:bufLen])
|
||||
return buf, nil
|
||||
}
|
||||
Reference in New Issue
Block a user