# AES128ChipSystemC **Repository Path**: wang-kangming/aes128-chip-system-c ## Basic Information - **Project Name**: AES128ChipSystemC - **Description**: No description available - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-18 - **Last Updated**: 2024-05-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 介绍 ## 简要概述 一个AES128的加密芯片,用SystemC语言建模为时序电路,输入128比特/16字节 明文 和 密钥,即可输出128比特/16字节的密文。 ## 组成部分 AES128加密的步骤主要是字节代换、行移位、列混淆、轮密钥加。 其中字节代换和行移位逻辑比较简单,列混淆和轮密钥加逻辑相对复杂一点。 列混淆是在有限域上的乘法,计算比较特殊,所以需要很多特殊x2、x3等模块; 轮密钥加复杂在于轮密钥的生成,一共生成11个轮密钥,在相应的轮次对密钥进行异或(异或即为加)即可。 AES128加密算法可以参考这篇博客:https://blog.csdn.net/m0_52316372/article/details/125687536 AES128加密算法也可以参考这个视频讲解:【【AES加密算法】| AES加密过程详解| 对称加密| Rijndael-128| 密码学| 信息安全】 https://www.bilibili.com/video/BV1i341187fK AES128拆解开的代码可以参考gitee:https://gitee.com/wang-kangming/aes128-chip.git ## 代码状况 代码目前比较粗糙,各个模块之间并没有统一的输入输出接口形式,所以正常人难以读懂这个代码,代码逻辑正在梳理ing,后续会在这里加入更多的讲解。 ### 模块设计规则 每个模块的设计,都必须满足如下设计准则: - 输入:必须具备reset、start/enable接口 - reset:值为true或者false,reset的优先级最高,true表示对模块进行重置,恢复为初始状态;如果reset一直为true,则一直执行重置的逻辑 - start/enable:值为true或者false,start表示开始执行任务,start的值只需要来1次,触发模块进入计算状态,之后不管start是否变为false还是一直为true,都不影响该模块处在计算状态 - 输出:必须具备done接口 - done:其值类型都统一为一个枚举变量,waiting_task, preparing_task, computing_task, task_finished 这4个状态