Spaces:
Sleeping
Sleeping
File size: 2,069 Bytes
cd0e075 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
from Crypto.Cipher import AES
from Crypto.Protocol.SecretSharing import Shamir
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import unpad
from base64 import b64decode
def decrypt(ciphertext_iv_hex: str, key: bytes):
"""
Decrypts data encrypted using Web Crypto API with AES-GCM in Python.
Args:
ciphertext_iv_hex (str): Encrypted data as hex string, in format "IV.CIPHERTEXT".
key (bytes): The decryption key as a byte array.
Returns:
str: The decrypted plaintext message.
"""
try:
# Split IV and ciphertext from hex string
iv_hex, ciphertext_hex = ciphertext_iv_hex.split(".")
iv_bytes = bytes.fromhex(iv_hex)
# print([b for b in iv_bytes])
ciphertext_bytes = bytes.fromhex(ciphertext_hex)
# print([b for b in ciphertext_bytes])
# Create AES-GCM cipher object with 128-bit tag (for compatibility with Web Crypto)
cipher = AES.new(key, AES.MODE_CBC, iv=iv_bytes)
# Decrypt the ciphertext (assuming authentication is handled elsewhere)
decrypted_bytes = cipher.decrypt(ciphertext_bytes)
# decrypted_text = unpad(decrypted_bytes, AES.block_size)
# print("Decrypted ggg:", decrypted_text)
# cb = [b for b in decrypted_bytes]
print("Decrypted bytes:", decrypted_bytes.replace(b"\x05", b""))
decrypted_text = decrypted_bytes.decode("utf-8") # Assuming UTF-8 encoding
return decrypted_text
except ValueError as e:
print("Decryption error:", e)
return None # Return None on decryption failure
# Example usage
key = b"YourSecretKey1234"[:16] # Keep this key secure!
encrypted_data = "714fd62d80c40154f87d1d174b1d01bf.ca73441f070a344512f85474372e7329ec01722a4a28699218f9bcd13bc81c3d87c80e4b81859f39df70917b54fc6df38bb222d749e5d20c5e1687dbc20956fb" # Get this from JavaScript
decrypted_text = decrypt(encrypted_data, key)
print("Decrypted message:", decrypted_text)
print("http://localhost:3000/uploads/photo_2024-03-19_01-44-38.jpg".encode())
|