Advanced Encryption Standard 高级加密标准
在密码学中AES又称Rijndael加密法 是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES
这次例程中可以修改master_aes_object.h中的MasterAesIv[] 和 MasterAesKey[] 的值使用不同的密钥
加密是一比一生成密文 如果用于传入 加密后不会增加传输的带宽压力
如果是传输使用 请使用相同的程序进行解密
测试例程
#include <stdio.h>
#include "aeckey.h"
#include "AES.h"
#include "random.h"
#include <stdlib.h>
#include <string.h>
#include "master_aes_object.h"
int main(){
char sendBuf[32] = {0};
unsigned char result[32] = {0};
strcpy(sendBuf, (char*)"12345678901234567890aabbcc");
int length = strlen(sendBuf);
CreateAES();
printf("%10s : %s\n", "source", sendBuf);
EncData((unsigned char *)sendBuf, result, strlen(sendBuf));
printf("%10s : ", "encode");
for(int i=0; i<length; i++){
printf("%02x ", (unsigned char)result[i]);
if((i+1)%10==0)
printf("\n%10s : ", "");
}
printf("\n");
memcpy(sendBuf, result, length);
memset(result, 0, sizeof(result));
//CreateAES();
EncData((unsigned char *)sendBuf, result, strlen(sendBuf));
printf("%10s : %s\n", "decode", (char*)result);
return 0;
}
运行程序:
$ ./a.out
source : 12345678901234567890aabbcc
encode : 35 52 ca 67 1b 18 c9 a6 7a 08
: 43 5e 65 13 cf 9d 7b 27 20 94
: 04 ac 8e 07 b0 ec
decode : 12345678901234567890aabbcc
关于AES中使用接口的一些注意事项以及说明:
// 创建AES对象
// 注意 创建后密钥为空,必需设置密钥
// 返回 AES对象指针,如果为NULL表明创建失败
// 参数
AES *AES_New(void);
// 释放AES对象
// 返回
// 参数 aes -- AES对象指针
void AES_Free(AES *aes);
// 设置工作模式
// 注意 创建后默认工作模式为CTR模式
// 如果使用ECB或CBC模式,加密和解密时所有数据长度必须是AES_BLOCK_SIZE的整数倍 !!!
// 返回 <0 失败; =0 成功
// 参数 aes -- AES对象指针
// mode -- AES工作模式
int AES_SetMode(AES *aes, const int mode);
// 设置密钥
// 返回 <0 失败; =0 成功
// 参数 aes -- AES对象指针
// userKey -- AES密钥指针
// bits -- AES密钥位数,必须是128、192、或256位
int AES_SetKey(AES *aes, const unsigned char *userKey, const int bits);
// 设置加密初始向量
// 返回
// 参数 aes -- AES对象指针
// initvec -- AES初始向量
void AES_SetEncInitVec(AES *aes, const unsigned char *initvec);
// 设置解密初始向量
// 返回
// 参数 aes -- AES对象指针
// initvec -- AES初始向量
void AES_SetDecInitVec(AES *aes, const unsigned char *initvec);
// 数据加密
// 注意 加密后的数据与原始数据长度相同,因此输出的加密数据缓冲区长度必须保证 >= length
// 返回 <0 失败; =0 成功
// 参数 aes -- AES对象指针
// inbuf -- 输入的原始数据缓冲区指针
// outbuf -- 输出的加密数据缓冲区指针,可以与inbuf相同
// length -- 输入的原始数据长度(字节)
int AES_DataEncrypt(AES *aes, const unsigned char *inbuf, unsigned char *outbuf, int length);
// 数据解密
// 注意 解密后的数据与加密数据长度相同,因此输出的解密数据缓冲区长度必须保证 >= length
// 返回 <0 失败; =0 成功
// 参数 aes -- AES对象指针
// inbuf -- 输入的加密数据缓冲区指针
// outbuf -- 输出的解密数据缓冲区指针,可以与inbuf相同
// length -- 输入的加密数据长度(字节)
int AES_DataDecrypt(AES *aes, const unsigned char *inbuf, unsigned char *outbuf, int length);
那么这种加密属于什么样的加密方式
是的 对称加密 也称为单密钥加密
所谓对称,就是采用这种加密方法的双方使用同样的密钥进行加密和解密
对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。
如果一方的秘钥被泄露,那么加密信息也就不安全了
因篇幅问题不能全部显示,请点此查看更多更全内容