pebaikan decription
This commit is contained in:
@@ -1,46 +1,50 @@
|
||||
package helper
|
||||
|
||||
import (
|
||||
"crypto/aes"
|
||||
"crypto/cipher"
|
||||
"crypto/sha256"
|
||||
"encoding/base64"
|
||||
"log"
|
||||
|
||||
lzstring "github.com/daku10/go-lz-string"
|
||||
)
|
||||
|
||||
// StringDecrypt - langsung coba decompress tanpa decrypt ulang
|
||||
func StringDecrypt(key string, encryptedString string) (string, error) {
|
||||
keyHash := sha256.Sum256([]byte(key))
|
||||
keyHashBytes := keyHash[:]
|
||||
log.Printf("StringDecrypt: Attempting decompression, data length: %d", len(encryptedString))
|
||||
|
||||
iv := keyHashBytes[:16]
|
||||
|
||||
encryptedBytes, err := base64.StdEncoding.DecodeString(encryptedString)
|
||||
if err != nil {
|
||||
return "", err
|
||||
// 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
|
||||
}
|
||||
|
||||
block, err := aes.NewCipher(keyHashBytes)
|
||||
if err != nil {
|
||||
return "", err
|
||||
// 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
|
||||
}
|
||||
|
||||
mode := cipher.NewCBCDecrypter(block, iv)
|
||||
|
||||
decrypted := make([]byte, len(encryptedBytes))
|
||||
mode.CryptBlocks(decrypted, encryptedBytes)
|
||||
|
||||
decrypted = RemovePKCS7Padding(decrypted)
|
||||
|
||||
dataResp, err := lzstring.DecompressFromEncodedURIComponent(string(decrypted))
|
||||
if err != nil {
|
||||
log.Fatalf("Error decompress: %v", err)
|
||||
}
|
||||
return dataResp, 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])
|
||||
if paddingLength > len(data) || paddingLength == 0 {
|
||||
log.Printf("RemovePKCS7Padding: Invalid padding length: %d, data length: %d", paddingLength, len(data))
|
||||
return data // Return original data if padding is invalid
|
||||
}
|
||||
|
||||
// Verify all padding bytes are correct
|
||||
for i := len(data) - paddingLength; 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
|
||||
}
|
||||
}
|
||||
|
||||
return data[:len(data)-paddingLength]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user