[算法]使用aes进行数据加密
2024-01-08 22:43:12
一、需求
有一段信息需要进行安全加密。
二、方案
对称加密和非对称加密两种方案,其中由于公钥密钥的管理还未形成规范,因此考虑使用对称加密。其中,对称加密算法使用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结果验证
第三方加解密工具网址:
实机效果:
3.5涉及加密信息,与密钥,因此截图数据与源码数据不同。
四、aes算法部分概念
4.1message:信息
用于加密的信息。
4.2iv:initialization vector,初始化向量
用于对信息进行加密的静态数据。
4.3key:密钥
用于进行加解密的关键数据。
4.4bit:位
用于规定加解密后的数据长度的格式,本文格式为128位加密。
五、结论
本文主要以应用层角度介绍如何使用aes加密算法对数据进行加解密,密码学知识体系庞大,限于篇幅无法介绍太多。
文章来源:https://blog.csdn.net/qq_34217861/article/details/135378011
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!