AES-256 Encryption Trace
Prompt
Create a Python program that performs AES-256 encryption using the PyCryptodome library. The program must allow the user to enter plaintext and a key derived from a user-provided word or sentence. Implement the following features: - Derive a 256-bit key from the user’s input phrase for key generation. - Encrypt the plaintext using AES-256. - Extract and display the internal AES state matrices at two points: the initial AddRoundKey step matrix and the final AddRoundKey step matrix after all rounds. - Additionally, display the SubBytes matrix, ShiftRows matrix, and MixColumns matrix from the first round (or the first round performed) for demonstration purposes. Ensure the program clearly outputs these matrices in a readable format, showing the state transformations during encryption. # Steps 1. Accept plaintext input from the user. 2. Accept a word or sentence input from the user and derive a 256-bit AES key from it, for example using a hash function. 3. Initialize AES-256 encryption using PyCryptodome with the derived key. 4. Perform encryption of the plaintext, capturing the state matrices after the initial AddRoundKey and after SubBytes, ShiftRows, MixColumns, and the final AddRoundKey step. 5. Display only the initial AddRoundKey matrix and the final AddRoundKey matrix. For intermediate steps, show only SubBytes, ShiftRows, MixColumns matrices from the first round. # Output Format - Display the state matrices as 4x4 hexadecimal byte matrices representing the AES state. - Clearly label each matrix (e.g., "Initial AddRoundKey Matrix", "SubBytes Matrix", "ShiftRows Matrix", "MixColumns Matrix", "Final AddRoundKey Matrix"). - Include the input plaintext and derived key (formatted in hex) for reference. # Notes - Use the PyCryptodome AES module but implement or intercept the internal AES transformation steps manually or via extending the library, as PyCryptodome does not directly expose intermediate states. - You may need to implement parts of the AES transformations (SubBytes, ShiftRows, MixColumns) to show intermediate matrices. - Ensure the key derivation method is secure and consistently produces a 256-bit key. Ensure that the program demonstrates the internal AES encryption transformations clearly and correctly according to AES-256 specification using Python and PyCryptodome.
Related Coding Prompts
Write Code
As a seasoned programmer, your task is to write code in [programming language] to [perform action]. The code should be efficient, well-structured, and optimized for performance. Make sure to follow best practices and industry standards while implementing the necessary algorithms and logic to achieve the desired functionality. Test the code thoroughly to ensure it functions as intended and meets all requirements. Additionally, document the code properly for future reference and maintenance.
Debug Code
Act as a seasoned programmer with over 20 years of commercial experience. Analyze the provided [piece of code] that is causing a specific [error]. Your task involves diagnosing the root cause of the error, understanding the context and functionality intended by the code, and proposing a solution to fix the issue. Your analysis should include a step-by-step walkthrough of the code, identification of any bugs or logical mistakes, and a detailed explanation of how to resolve them. Additionally, suggest any improvements or optimizations to enhance the performance, readability, or maintainability of the code based on your extensive experience. Ensure that your solution adheres to best practices in software development and is compatible with the current development environment where the code is being executed.
Do Code Review
As a seasoned programmer with over 20 years of commercial experience, your task is to perform a comprehensive code review on the provided [piece of code]. Your review should meticulously evaluate the code's efficiency, readability, and maintainability. You are expected to identify any potential bugs, security vulnerabilities, or performance issues and suggest specific improvements or optimizations. Additionally, assess the code's adherence to industry standards and best practices. Your feedback should be constructive and detailed, offering clear explanations and recommendations for changes. Where applicable, provide examples or references to support your suggestions. Your goal is to ensure that the code not only functions as intended but also meets high standards of quality and can be easily managed and scaled in the future. This review is an opportunity to mentor and guide less experienced developers, so your insights should be both educational and actionable.