README.md
Rendering markdown...
import base64
import hmac
import hashlib
import json
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
encrypted_payload_b64 = """
xxx
"""
# Base64-encoded Laravel APP_KEY (without 'base64:' prefix)
app_key_b64 = "xxx"
# ================================================
def decrypt_laravel_cookie(encrypted_payload_b64: str, key_b64: str) -> bytes:
"""
Decrypt a Laravel encrypted cookie (AES-256-CBC JSON payload) and return raw bytes.
"""
key = base64.b64decode(key_b64)
payload_json = base64.b64decode(encrypted_payload_b64)
payload = json.loads(payload_json)
print("Decrypted payload:", payload)
# Validate MAC
iv_b64 = payload['iv']
value_b64 = payload['value']
mac_data = iv_b64.encode('utf-8') + value_b64.encode('utf-8')
mac_expected = hmac.new(key, mac_data, hashlib.sha256).hexdigest()
if not hmac.compare_digest(payload.get('mac', ''), mac_expected):
raise ValueError("MAC validation failed.")
# Decrypt
iv = base64.b64decode(iv_b64)
ciphertext = base64.b64decode(value_b64)
cipher = AES.new(key, AES.MODE_CBC, iv)
return unpad(cipher.decrypt(ciphertext), AES.block_size)
def main():
# Decrypt and parse cookie
raw = decrypt_laravel_cookie(encrypted_payload_b64, app_key_b64)
print(raw)
if __name__ == '__main__':
main()