STM32 AES 加解密流程梳理

2021-08-27 08:01:50 字數 961 閱讀 8604

通用的aes加密演算法都屬於block cipher類,採用分塊加密方式,每個資料塊固定為16位元組(128位)

以aes-128演算法為例, 該演算法秘鑰長度16位元組(128位)

aesctx.mkeysize = 16;

甲乙雙方約定一種雙方都支援的加密演算法(aes),約定資料塊之間的串聯模式(cbc/cfb/ofb/ecb等)

開始傳送密文資料之前,甲乙預先生成16位元組會話秘鑰 uint8_t key[16]

甲方將若干位元組原始資料分為n個塊, 每個塊為固定長度16位元組, 若最後乙個塊不滿16位元組需要按約定補齊16位元組

再選擇16位元組隨機數uint8_t ivec[16](選擇隨機數的目的是抵抗統計分析攻擊)

n*16位元組明文加密後輸出n*16位元組密文

將全部密文一次性傳送給乙方,將16位元組隨機數也傳送給乙方

乙方收到n*16位元組密文,以及固定16位元組明文隨機數

乙方檢查當前日期和時鐘,秘鑰是否仍在有效期內,有沒有超過最大允許收發位元組數(會話秘鑰有效期可以是若干小時,也可以是若干個資料幀或最大收發位元組數。加密演算法強度越低,有效期相應縮短。)

解密得到n個資料塊

刪除最後乙個資料塊為補齊16位元組而新增的1~16個字元

乙方將原始資料拼接成完整的

乙方需要應答報文時,執行步驟3,選擇新的隨機數,生成新的密文,反向傳送給甲方。甲方執行步驟4解析乙方發來的密文。

甲方加密函式呼叫步驟uartsend(16位元組的ivec隨機數組)

uartsend(輸出資料塊1, 輸出資料塊2, ..., 輸出資料塊n, padding)

乙方解密函式呼叫步驟

uartreceive(16位元組隨機數)

aes_ecb_decrypt_init(初始化上下文結構體, 秘鑰值, 16位元組隨機數或null);

乙方得到明文: 資料塊1+資料塊2, ..., +資料塊n

AES對稱加解密

python實現aes對稱加解密 關於aes對稱加密的概念網上很多,在此不在贅述,直接上 import base64 from crypto.cipher import aes aes加密解密工具類 資料塊128位 key 為16位 iv 為16位 aes加密模式為cbc 填充 pkcs7paddi...

AES 對稱加解密

1.生成aes key aes根據密碼生成key param password return public static key createkey string password catch exception e return null 2.aes加密 ecb模式 aes加密操作,使用ecb模式...

AES加解密(對稱)

aes是一種對稱的加密和解密的演算法,其用法如下 package com.zys.demo.util import lombok.extern.slf4j.slf4j import j ax.crypto.cipher import j ax.crypto.spec.ivparameterspec ...