AES-128 GCM (аутентифицированное дешифрование в режиме Галуа/счетчика)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 AES-128 GCM (аутентифицированное дешифрование в режиме Галуа/счетчика)

Сообщение Anonymous »

Я пытаюсь расшифровать сообщение (полученное через Wireless M-Bus). Используемый метод — AES-128 GCM. У меня есть правильный ключ для этого. Я знаю это, потому что могу расшифровать полученные сообщения с помощью программы в Windows.
Однако теперь мне нужен сценарий 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
Вопрос 1:
Следует Я пытаюсь расшифровать все полученное сообщение, или только его зашифрованную часть, или все сообщение 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))

Я построил IV/Nonce в соответствии с руководством. Кроме того, я пробовал ввести полученное сообщение как полностью, так и по частям в виде зашифрованного текста.

Подробнее здесь: https://stackoverflow.com/questions/793 ... decryption
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»