一、需求
有一段信息需要进行安全加密。
二、方案
对称加密和非对称加密两种方案,其中由于公钥密钥的管理还未形成规范,因此考虑使用对称加密。其中,对称加密算法使用openssl中,关于aes的部分,输出结果为128位数据。
三、实现
3.1寻找资源
从如下开源库中下载源码:
阿里IOT AES C端代码仓库:
https://gitee.com/alios-things-admin/AliOS-Things/tree/rel_3.1.0/components/linkkit/infra
阿里IOT AES H代码仓库:
https://gitee.com/alios-things-admin/AliOS-Things/tree/rel_3.1.0/include/linkkit/infra
3.2构建应用层代码
int main(int argc, char **argv)
{if (argc < 1){printf("Usage:\n");printf("aes argv[1] argv[2] argv[3] \n");printf(" argv[1]: 0:encode 1:decode \n");// printf(" argv[2]: the message \n");// printf(" argv[3]: the secret key \n");printf("for example:aes 1 \n");return -1;}char iv[16] = {0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,};char key[16] = {0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,};char *msgStr = "Evenurs,Welcome.";char message[16] = {0};memcpy(message, msgStr, 16);void *p = infra_aes128_init(key, iv, atoi(argv[1]));char outputBuf[16] = {0};if (atoi(argv[1]) == 0){infra_aes128_cfb_encrypt(p, message, 16, outputBuf);}else{char testBuf[16] = {atoi(argv[2]), atoi(argv[3]), atoi(argv[4]), atoi(argv[5]),atoi(argv[6]), atoi(argv[7]), atoi(argv[8]), atoi(argv[9]),atoi(argv[10]), atoi(argv[11]), atoi(argv[12]), atoi(argv[13]),atoi(argv[14]), atoi(argv[15]), atoi(argv[16]), atoi(argv[17])};infra_aes128_cfb_decrypt(p, testBuf, 16, outputBuf);// infra_aes128_cfb_decrypt(p, argv[2], 16, outputBuf);}printf("output hex=");for (char cnt = 0; cnt < 16; cnt++){printf("0x%x ", outputBuf[cnt]);}printf("\n");printf("output string=%s\n", outputBuf);
}
3.3gcc交叉编译运行
3.4结果验证
第三方加解密工具网址:
AES 加密/解密 - 在线工具
实机效果:
3.5涉及加密信息,与密钥,因此截图数据与源码数据不同。
四、aes算法部分概念
4.1message:信息
用于加密的信息。
4.2iv:initialization vector,初始化向量
用于对信息进行加密的静态数据。
4.3key:密钥
用于进行加解密的关键数据。
4.4bit:位
用于规定加解密后的数据长度的格式,本文格式为128位加密。
五、结论
本文主要以应用层角度介绍如何使用aes加密算法对数据进行加解密,密码学知识体系庞大,限于篇幅无法介绍太多。