aes加密c语言_AES128 ECB加密——一看就懂,图文并茂

AES是一个高级加密标准,由比利时密码学家设计。AES-128 ECB加密包括明文矩阵转换、字节代换、行移位、列混合和轮密钥加等步骤。加密过程中涉及域加和域乘的数学操作,通过异或和位移实现加密解密。
摘要由CSDN通过智能技术生成

AES是什么?

AES是一个高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法。该算法为【比利时】密码学家Joan Daemen和Vincent Rijmen早期所设计的Square改良而来。

这个时候你会发现一个有趣的点:Rijndael是结合两位作者的名字而来!

AES按加密方式分为:AES-128、AES-192、AES-256;

按加密模式分为:ECB、CBC、CTR、CFB、OCF。

56797b15ca02a2cc57c146922297522f.png

AES流程是怎么样的 ?

首先要给大家介绍几个概念:

明文:未经加密的真实原始数据(重点:珍贵)

密钥:用来给明文加密的数据(重点:珍贵)

AES加密函数:经过N轮的加密流程,让明文+密钥生成一个别人看不懂的密文,传输用途!(密文重点:别人看不懂,获取了也看不懂)

AES加密流程如下:

ec6a29a038a98431fe35492241cb58c2.png

获取密文后,如果需要进行解密,接收方需要知道相同的密钥,并经过AES解密函数解密,才能得到正确的明文。

解密流程如下:c649e4a72339cab9415a217374938e08.png

AES加密函数,即是AES加密原理。那么AES-128加密原理是怎么样的呢?

首先,复习一个C语言的算法:【异或 】”^”

异或运算符”∧”它的规则是若参加运算的两个二进位同号,则结果为0(假);异号则为1(真)。即 0∧0=0,0∧1=1, 1^0=1,1∧1=0。496d0ab298538355790e1d0191976f0b.png

信息安全算法【域加】和【域乘】

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中可以使用OpenSSL库来实现AES(ECB/CBC)加密算法。下面是一个简单的示例代码: ```c #include <stdio.h> #include <openssl/aes.h> /* AES ECB加密 */ void aes_ecb_encrypt(const unsigned char *plaintext, const unsigned char *key, unsigned char *ciphertext) { AES_KEY aes_key; AES_set_encrypt_key(key, 128, &aes_key); AES_ecb_encrypt(plaintext, ciphertext, &aes_key, AES_ENCRYPT); } /* AES CBC加密 */ void aes_cbc_encrypt(const unsigned char *plaintext, const unsigned char *key, const unsigned char *iv, unsigned char *ciphertext) { AES_KEY aes_key; AES_set_encrypt_key(key, 128, &aes_key); AES_cbc_encrypt(plaintext, ciphertext, 128, &aes_key, iv, AES_ENCRYPT); } int main() { unsigned char key[] = "0123456789ABCDEF"; // 16字节长度的密钥 unsigned char iv[] = "1234567890ABCDEF"; // 16字节长度的初始向量 unsigned char plaintext[] = "Hello, World!"; // 待加密明文 unsigned char ecb_ciphertext[AES_BLOCK_SIZE]; unsigned char cbc_ciphertext[AES_BLOCK_SIZE]; aes_ecb_encrypt(plaintext, key, ecb_ciphertext); aes_cbc_encrypt(plaintext, key, iv, cbc_ciphertext); printf("ECB ciphertext: "); for (int i = 0; i < AES_BLOCK_SIZE; i++) { printf("%02x ", ecb_ciphertext[i]); } printf("\n"); printf("CBC ciphertext: "); for (int i = 0; i < AES_BLOCK_SIZE; i++) { printf("%02x ", cbc_ciphertext[i]); } printf("\n"); return 0; } ``` 上面的代码实现了AES-128算法的ECB和CBC模式的加密。通过`aes_ecb_encrypt`函数和`aes_cbc_encrypt`函数,可以将明文加密为对应的密文。其中,`key`和`iv`分别为密钥和初始向量,在实际应用中需要保证其安全性和随机性。 `main`函数中的示例对字符串"Hello, World!"进行了ECB和CBC加密,并打印出对应的密文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值