LibTom 加密之AES
下面的C程序实现的功能:
将字符串c1用AES方法加密放在c2中,再解密放在c3中,密钥是myKey
加密部分:
首先引入头文件
#include "tomcrypt.h"
#pragma comment (lib,"tomcrypt.lib")
声明变量:加密密钥、加密状态
unsigned char myKey[32] = "7187654321";
symmetric_key skey = 0;
加密前初始化状态(密钥,密钥长度,迭代次数(0: 使用推荐值),加密状态)
aes_setup(myKey, 32, 0, &skey);
需要加密的字符串长度任意
输出长度>= 输入长度,分段长度的倍数(这里就是16的倍数)
unsigned char c1[32] = "硬件研发中心";
unsigned char c2[32] = {0};
分段加密,每段长度为16 (一般不可能只有2段,自己写循环)
aes_ecb_encrypt(&c1[0], &c2[0],&skey);
aes_ecb_encrypt(&c1[16], &c2[16],&skey);
输出密文
printf_s("encrypted data:\n");
for (int i=0;i<32;i++)
{
printf_s("%x",c2[i]);
}
printf_s("\n\n");
解密部分:
定义c3数组,存放解密数据
unsigned char c3[32] = {0};
解密前初始化状态,和加密的状态是完全一致的
aes_setup(myKey, 32, 0, &skey);
分段解密
aes_ecb_decrypt(&c2[0], &c3[0],&skey);
aes_ecb_decrypt(&c2[16], &c3[16],&skey);
打印解密数据
printf_s("decrypted data:\n");
for (int i=0;i<32;i++)
{
printf_s("%c",c3[i]);
}
printf_s("\n\n");
查看GitHub 完整代码
