Однако теперь мне нужен сценарий Python, который может делать то же самое. Я уже получаю сообщения, но не знаю, как их расшифровать. Несмотря на обширный поиск в Google и использование ChatGPT, я так и не понял этого.
Насколько я понимаю, мне нужно включить в скрипт следующие данные:
- Ключ (не буду его здесь публиковать, но его длина 32 символа (128 бит). 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00)
- Дополнительные аутентифицированные данные (AAD)< /li>
Тег аутентификации (он находится в конце сообщения) - Сообщение/зашифрованный текст (зашифрованная часть сообщение)
- Nonce / IV
Следует Я пытаюсь расшифровать все полученное сообщение, или только его зашифрованную часть, или все сообщение Wireless M-Bus?
Вопрос 2:
Правда ли? Nonce / IV относятся к одному и тому же?
Может кто-нибудь помочь мне понять что я делаю не так или чего не понимаю? Я постоянно получаю сообщение об ошибке.
Вот код, который я сейчас использую:
Код: Выделить всё
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
def decrypt_aes_gcm(key, nonce, ciphertext, aad, tag):
"""
Decrypt AES-GCM encrypted data.
Args:
key (bytes): 16-byte AES key.
nonce (bytes): Nonce/IV (12 bytes typically).
ciphertext (bytes): Encrypted data.
aad (bytes): Additional Authenticated Data.
tag (bytes): Authentication tag.
Returns:
bytes: Decrypted plaintext.
"""
# AES-GCM Cipher
decryptor = Cipher(
algorithms.AES(key),
modes.GCM(nonce, tag),
backend=default_backend()
).decryptor()
# Add AAD if provided
if aad:
decryptor.authenticate_additional_data(aad)
# Decrypt the ciphertext
plaintext = decryptor.update(ciphertext) + decryptor.finalize()
return plaintext
# Voorbeelddata (vervang met je eigen waarden)
key = bytes.fromhex("00000000000000000000000000000000") # 16 bytes
nonce = bytes.fromhex("0102030405060708090a0b0c") # 12 bytes
ciphertext = bytes.fromhex("d9313225f88406e5a55909c5aff5269a") # Encrypted data
aad = bytes.fromhex("feedfacedeadbeeffeedfacedeadbeef") # AAD (optioneel)
tag = bytes.fromhex("5bc94fbc3221a5db94fae95ae7121a47") # Authentication tag
try:
plaintext = decrypt_aes_gcm(key, nonce, ciphertext, aad, tag)
print("Decrypted message:", plaintext.decode())
except Exception as e:
print("Error during decryption:", str(e))
Подробнее здесь: https://stackoverflow.com/questions/793 ... decryption