📄 des_pro.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 + -