⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des_pro.c

📁 redhat Linux下DES算法加密的一个例子。
💻 C
字号:
#include "des_pro.h"static int load_key(char *key_file){  FILE *fp;  int   id,len,ret,key_len;  char *buf[512];  struct keys *gen_key;  fp=fopen(key_file,"rb");  key_len=fread(buf,1,512,fp);  fclose(fp);  gen_key = (struct keys *)buf;    bcopy(gen_key->key, key, EVP_MAX_KEY_LENGTH);  bcopy(gen_key->iv, iv, EVP_MAX_IV_LENGTH);}/** * 产生一个KEY和 * IV */static void generate_pk(char *key_file){	struct keys gen_key;	FILE *fp;	int   id,len,ret,key_len;	RAND_bytes(key, EVP_MAX_KEY_LENGTH);	RAND_pseudo_bytes(iv, EVP_MAX_IV_LENGTH);	bcopy(key,gen_key.key, EVP_MAX_KEY_LENGTH);	bcopy(iv, gen_key.iv, EVP_MAX_IV_LENGTH);	fp=fopen(key_file,"wb");	key_len=fwrite((char *)&gen_key,1, sizeof(struct keys),fp);	fclose(fp);}/** * 解密函数 *  */static char *des_decrypt(unsigned char *data,int len, int *out_len){	int tem;	EVP_DecryptInit(&ctx,EVP_des_cbc(),key,iv);		unsigned char *pt = (unsigned char*)malloc(len+EVP_CIPHER_CTX_block_size(&ctx)+1);   	EVP_DecryptUpdate(&ctx,pt,&tem,data,len);	*out_len = tem - pt[tem-1];	return pt;}static char *des_encrypt(unsigned char *data,int len, int *out_len){	int tmp,ol=0;	EVP_EncryptInit(&ctx, EVP_des_cbc(),key,iv);	unsigned char *ret = (unsigned char*)malloc(len+EVP_CIPHER_CTX_block_size(&ctx));	EVP_EncryptUpdate(&ctx,&ret[ol],&tmp,&data[ol],len);	ol +=tmp;	EVP_EncryptFinal(&ctx,&ret[ol], out_len);	*out_len = ol + tmp;	return ret;}/***********例子*************/int main(){	int src_len,en_len=0,de_len=0;	char *pstr = "http://www.163.com/qq",*rtns;		rtns = (unsigned char*)malloc(1024);	memset((char *)rtns,'\0',1024);		//generate_pk("/root/des_key.dat");//生成密	load_key("/root/des_key.dat");//加载密	src_len = strlen(pstr);		char *mm_str = des_encrypt(pstr, src_len, &en_len);	char *ptr = des_decrypt(mm_str,en_len, &de_len);	bcopy(ptr, rtns, de_len);	printf("\n value=%s", rtns);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -