[算法]使用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 加密/解密 - 在线工具

实机效果:

[算法]使用aes进行数据加密_第1张图片

3.5涉及加密信息,与密钥,因此截图数据与源码数据不同。

四、aes算法部分概念

4.1message:信息

用于加密的信息。

4.2iv:initialization vector,初始化向量

用于对信息进行加密的静态数据。

4.3key:密钥

用于进行加解密的关键数据。

4.4bit:位

用于规定加解密后的数据长度的格式,本文格式为128位加密。

五、结论

本文主要以应用层角度介绍如何使用aes加密算法对数据进行加解密,密码学知识体系庞大,限于篇幅无法介绍太多。

你可能感兴趣的:(算法,aes,数据加密,数据解密,linux)