من در حال انجام یک برنامه فوق العاده کوچک و ساده هستم ، جایی که می خواهد کمی بیشتر این ماژول را بفهمد ، اما اتفاق بسیار عجیبی رخ می دهد.
کد زیر برمی گردد:
Traceback (آخرین تماس آخر)
پرونده ". crypto.py" ، خط 100 ، در init = Emisor ()
پرونده ". crypto.py" ، خط 15 ، در __init__ self.encrypt ()
پرونده ". crypto.py" ، خط 71 ، در رمزگذاری گیرنده (cipher_text ، tag_mac ، self.key)
پرونده ". crypto.py" ، خط 84 ، در __init__ self.decrypt (self.cipher_text ، self.tag_mac ، self.key)
پرونده ". crypto.py" ، خط 93 ، در رمزگشایی plain_text = cipher.decrypt_and_verify (cipher_text، tag_mac)
پرونده "C: Users EQUIPO AppData Local Programs Python Python37-32 lib site-packets Crypto Cipher _mode_gcm.py" ، خط 569 ، در رمزگشایی_اند_verify self.verify (دریافت_mac_tag)
پرونده "C: Users EQUIPO AppData Local Programs Python Python37-32 lib site-packets Crypto Cipher _mode_gcm.py" ، خط 510 ، برای تأیید بالا بردن ValueError ("بررسی MAC انجام نشد")
ValueError: بررسی MAC انجام نشد
من پی دی اف های مختلف ، اسناد ، فیلم ها ، وبلاگ ها و غیره را خوانده ام ، اما راه حل را پیدا نکردم.
PDTA: این "nonce" است و آن عبارت از "سربرگ" است ، روشی به نام به روزرسانی () وجود دارد و در همین جا است که باید هدر را قرار دهم ، کمی گم شده ام که و غیره.
از Crypto.Cipher واردات AES
از Crypto.Random واردات get_random_bytes را دریافت کنید
فرستنده کلاس ():
Def __init __ (خود):
self.random_password = هیچکدام
self.message_plain = درست است
self.key = هیچکدام
self.password_option ()
self.text_option ()
self.encrypt ()
def password_option (خود):
در حالی که (self.random_password == هیچکدام):
تصادفی = ورودی (" n آیا می خواهید یک کلید متقارن تصادفی تولید کنید؟ (y / n) n n >>>") .strip () پایین تر ()
اگر تصادفی == "y":
self.random_password = درست است
خود تصادفی ()
elif تصادفی == "n":
self.random_password = نادرست
خود تصادفی ()
دیگری:
عبور
def text_option (خود):
اگر self.message_plain:
سوال = ورودی (" n چگونه پیام خود را وارد می کنید؟ n n [1] پرونده n n [2] مستقیماً در برنامه n n >>>") .strip ()
اگر سوال == "1":
path = input (r " n مسیر پرونده را وارد کنید n n >>>") .strip ()
name = path.split ("\") [-1]
self.message_plain = باز (نام ، حالت = "rb")
سوال elif == "2":
self.message_plain = input (" n پیام خود را وارد کنید n n >>>") .strip ()
self.message_plain = self.message_plain.encode ("utf-8")
دف تصادفی (خود):
اگر self.random_password:
self.key = get_random_bytes (16)
دیگری:
self.key = input (" n گذرواژه خود را وارد کنید n n >>>") .strip ()
رمزگذاری دف (خود):
رمزگذاری = AES.new (self.key، AES.MODE_GCM)
cipher.update (ب "هدر")
cipher_text، tag_mac = cipher.encrypt_and_digest (self.message_plain)
گیرنده (cipher_text ، tag_mac ، self.key)
گیرنده کلاس ():
Def __init __ (خود ، رمزنگاری ، متن ، tag_mac ، کلید):
self.cipher_text = رمزنگاری
self.tag_mac = tag_mac
key.key = کلید
self.decrypt (self.cipher_text ، self.tag_mac ، self.key)
رمزگشایی Def (خود ، cipher_text ، tag_mac ، کلید):
#تلاش كردن:
# nonce = aes_cipher.nonce
رمزگذاری = AES. جدید (کلید ، AES.MODE_GCM)
cipher.update (ب "هدر")
plain_text = cipher.decrypt_and_verify (cipher_text، tag_mac)
#except ValueError:
# چاپ (" n خطایی رخ داده است.")
اگر __name__ == '__main__':
ابتکار = فرستنده ()