[算法]使用aes进行数据加密

一、需求

有一段信息需要进行安全加密。

二、方案

对称加密和非对称加密两种方案,其中由于公钥密钥的管理还未形成规范,因此考虑使用对称加密。其中,对称加密算法使用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加密算法对数据进行加解密,密码学知识体系庞大,限于篇幅无法介绍太多。

相关推荐

  1. go使用aes加密算法

    2024-01-04 14:12:02       28 阅读
  2. SpringBoot+Vue使用AES进行接口加密

    2024-01-04 14:12:02       28 阅读
  3. 如何使用PHP进行数据加密和解密?

    2024-01-04 14:12:02       36 阅读
  4. vue 使用AES加密

    2024-01-04 14:12:02       39 阅读
  5. golang 使用AES加密

    2024-01-04 14:12:02       15 阅读
  6. 使用 AES 算法在 C# 中实现安全字符串加密和解密

    2024-01-04 14:12:02       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-04 14:12:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-04 14:12:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-04 14:12:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-04 14:12:02       20 阅读

热门阅读

  1. Unity Hub 无法激活许可证

    2024-01-04 14:12:02       39 阅读
  2. NCC开发记录

    2024-01-04 14:12:02       42 阅读
  3. SQL WHERE 语句(条件选择)

    2024-01-04 14:12:02       38 阅读
  4. Redis缓存击穿、缓存雪崩、缓存穿透

    2024-01-04 14:12:02       33 阅读
  5. SSD的控制器架构

    2024-01-04 14:12:02       37 阅读
  6. Android 使用 retrofit2 解析XML响应

    2024-01-04 14:12:02       39 阅读
  7. uView Form 表单

    2024-01-04 14:12:02       43 阅读
  8. 15.bash shell中自定义命令行选项与getopt/getopts

    2024-01-04 14:12:02       40 阅读