当前位置:   article > 正文

用openssl的DES的CBC模式对字符串进行加密_openssl.net des

openssl.net des

在研究了一天openssl的des加密算法后,为了遗忘,把代码留下

我的编程模型:

在这里插入图片描述

#include <openssl/des.h>
#include <stdio.h>
#include <string.h>
#define MAX_LINE 1024
#pragma warning(disable  : 4996)
int main1(void)
{
	//输入密钥
	//DES_cblock key ;
	//memcpy(key, ("88888888"), 8);
	const_DES_cblock key = "1234567";
	//随机密钥
	//DES_random_key(&key);

	DES_key_schedule schedule;			// 密钥
	//转换成schedule
	DES_set_key_checked(&key, &schedule);		//设置密钥

	const_DES_cblock input = "hehehe";  //对字符串进行加密
	DES_cblock output;

	printf("明文: %s\n", input);

	//加密
	// 参数:输入数据、输出数据、密钥、模式
	DES_ecb_encrypt(&input, &output, &schedule, DES_ENCRYPT);
	printf("Encrypted!\n");

	printf("密文: ");
	int i;
	for (i = 0; i < sizeof(input); i++)
		printf("%02x", output[i]);
	printf("\n");

	//解密
	// 参数:输入数据、输出数据、密钥、模式
	DES_ecb_encrypt(&output, &input, &schedule, DES_DECRYPT);
	printf("Decrypted!\n");
	printf("cleartext:%s\n", input);
	return 0;

	
}

// DES CBC模式加密,
// 参数:input一般是明文输入 output一般是密文输出
// 难点:len的确定
int cryper1(unsigned char input[], const char *key)
{
	//const char *keystring = "this is my key";
	//DES_cblock key;
	DES_key_schedule key_schedule;
	const_DES_cblock *keystring = (const_DES_cblock *)key;
	//生成一个 key
	//DES_string_to_key(keystring, &key);//根据该字符串,生成一组经过计算的Key,可跳过这步
	DES_set_key_unchecked(keystring, &key_schedule);
	//if (DES_set_key_checked(keystring, &key_schedule) != 0) {
	//	printf("convert to key_schedule failed.\n");
	//	return -1;
	//}

	//需要加密的字符串
	//unsigned char input[] = "this is a text being encrypted by openssl";
	// 最少给len开辟这么多空间 加入input为1 则给len 8个字节空间,凑够一个分组
	size_t len = (sizeof(input) + 7) / 8 * 8;		// size_t 近似于 int
	unsigned char *output = (unsigned char *)malloc(len + 1);
	//IV
	DES_cblock ivec;
	//将向量初始化为0
	//IV设置为0x0000000000000000
	memset((char*)&ivec, 0, sizeof(ivec));

	//加密
	//参数说明
	/*
	input: 输入数据;(8字节长度--好像不一定)
	output: 输出数据;(8字节长度)
	length: 数据长度;(这里数据长度不包含初始化向量长度)
	schedule:密钥;
	ivec: 初始化向量;(一般为8个字节0)
	enc:加密:DES_ENCRYPT , 解密:DES_DECRYPT;*/
	DES_ncbc_encrypt(input, output, sizeof(input), &key_schedule, &ivec, DES_ENCRYPT);

	//输出加密以后的内容
	for (int i = 0; i < len; ++i)
		printf("%02x", output[i]);
	printf("\n");

	memset((char*)&ivec, 0, sizeof(ivec));
	//memset(ivec, 0, sizeof(ivec));    // 经过测试,这个也行

	//解密
	DES_ncbc_encrypt(output, input, len, &key_schedule, &ivec, DES_DECRYPT);

	printf("%s\n", input);

	free(output);
	return EXIT_SUCCESS;
}

// 自己编写的des_CBC模式编程模型
void cryper(unsigned char input[], const char* key)
{
	const_DES_cblock* keystring = (const_DES_cblock*)key;
	DES_key_schedule key_schedule;
	//初始化向量
	DES_cblock ivec;
	memset(ivec, 0, sizeof(ivec));
	size_t len = (sizeof(input) + 7) / 8 * 8;
	unsigned char* output = (unsigned char*)malloc(len+1);
	// 生成密钥
	DES_set_key_unchecked(keystring, &key_schedule);
	// 加密
	DES_cbc_encrypt(input, output, sizeof(input), &key_schedule, &ivec, DES_ENCRYPT);
	// 输出加密后的结果
	printf("密文:");
	for (int i = 0; i < len; ++i) {
		printf("%02x", output[i]);
	}
	printf("\n");
	//解密
	memset(ivec, 0, sizeof(ivec));
	DES_cbc_encrypt(output, input, len,&key_schedule, &ivec, DES_DECRYPT);
	printf("明文:");
	printf("%s", input);
}

int main(void)
{
	//对文件进行加密
	//char buf[1024];
	//FILE *fp = fopen("test.txt", "r");
	//int len;		//字符个数
	//fgets(buf, MAX_LINE, fp);
	//
	//len = strlen(buf);
	//buf[len - 1] = '\0';  /*去掉换行符*/
	//printf("%s %d \n", buf, len - 1);
	//char cryptext[1024] = { 0 };
	unsigned char input[] = "iamyourbaba";
	const char* key = "123456789";
	cryper(input,key);		//加密后的结果哦通过cryptext带回
	getchar();
	//fclose(fp);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146

运行结果:
在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号