目录
简介
- AES-128是一种对称加密算法,其中“128”表示密钥长度为128位(16字节)。AES-128是高级加密标准(Advanced Encryption Standard, AES)的一个变体,其他变体包括AES-192和AES-256,分别使用192位和256位的密钥。
- KF32146/156芯片内部集成了一个AES 加密模块,其可以进行128bit (256bit也适用)的AES 加密解密,生成用于流密码加密的密钥(支持ECB和CBC模式)
使用方法
配置好如下参数之后,即可使用AES加密解密功能(详细内容请参考SDK的例程)。
/* 秘钥 */
uint32_t AesKey[4] = {0x2b7e1516, 0x28aed2a6, 0xabf71588, 0x09cf4f3c};
/* 加密时明文 */
uint32_t AesPlain[4] = {0x6bc1bee2, 0x2e409f96, 0xe93d7e11, 0x7393172a};
/* 解密时密文 */
uint32_t AesPlain_de[4] = {0xA1EE5608, 0xB33AF054, 0x70858608, 0xD1DE080F};
/* 密文 */
uint32_t AesCipher[4] = {0x3ad77bb4, 0x0d7a3660, 0xa89ecaf3, 0x2466ef97};
#define AES_KEY_128BITS (0x3U)
#define AES_KEY_256BITS (0x7U)
/* AES 加密初始化参数 */
Aes_Config_t AesInit_Encrypt = {
.ClkSrc = AES_TRNG_SCK_HFCLK, /* AES 时钟源选择 */
.ClkDiv = AES_SCK_DIV0, /* AES 时钟分频 */
.Algorithm = AES_STANDARD_ALGORITHM, /* 选择标准算法或者自定义算法*/
.AesMode = AES_WORK_ECB_MODE, /* 选择工作模式 */
.EnOrDecrytion = AES_ENCRYPT, /* 选择加密或者解密 */
.KeyLen = AES_KEY_128BITS, /* 选择密钥长度 */
.ExtensionNum = 0U, /* 选择扩展轮数,仅自定义算法时有效 */
.SBoxInv = AES_SBOX_NOR_REPLACE, /* 选择是否使用反SBox替换 */
.Key = AesKey,
};
/* AES 解密初始化参数 */
Aes_Config_t AesInit_Encrypt = {
.ClkSrc = AES_TRNG_SCK_HFCLK, /* AES 时钟源选择 */
.ClkDiv = AES_SCK_DIV0, /* AES 时钟分频 */
.Algorithm = AES_STANDARD_ALGORITHM, /* 选择标准算法或者自定义算法*/
.AesMode = AES_WORK_ECB_MODE, /* 选择工作模式 */
.EnOrDecrytion = AES_DECRYPT, /* 选择加密或者解密 */
.KeyLen = AES_KEY_128BITS, /* 选择密钥长度 */
.ExtensionNum = 0U, /* 选择扩展轮数,仅自定义算法时有效 */
.SBoxInv = AES_SBOX_NOR_REPLACE, /* 选择是否使用反SBox替换 */
.Key = AesKey,
};
详细解析
可以直接参考以下内容,按照如下操作使用:
- 有一个宏定义用于定义字节序,这里我们定义为1:
- 然后使用起来就很简单了,比如你的秘钥为0123456789ABCDEF0123456789ABCDEF,明文为0123456789ABCDEF0123456789ABCDEF,那么对应的秘钥和明文以及得到的密文如下图所示:
Index | AesKey | AesPlain | AesCipher |
---|---|---|---|
0 | 0x01234567 | 0x01234567 | 0xA1EE5608 |
1 | 0x89ABCDEF | 0x89ABCDEF | 0xB33AF054 |
2 | 0x01234567 | 0x01234567 | 0x70858608 |
3 | 0x89ABCDEF | 0x89ABCDEF | 0xD1DE080F |
验证
加密验证
-
此处为寄存器实际值,实际输出结果的AesCipher数组已经处理过了顺序
-
利用在线网站计算的结果:
解密验证
-
此处为寄存器实际值,实际输出结果的AesCipher数组已经处理过了顺序
-
利用在线网站计算的结果: