在项目中使用到了加解密的函数,使用到了openssl,做点记录

来源:互联网 发布:python 多行注释快捷键 编辑:程序博客网 时间:2024/06/05 06:17

其实在项目中使用openssl是受到限制的,openssl是基于GPL的, 所以如果商业用,尽量使用http://www.gladman.me.uk

这是一个和openssl相当的库,用法也和openssl一样。



这是所需要的下载压缩包地址:http://gladman.plushost.co.uk/oldsite/AES/

,里面含有vs2012和vs2013的工程,可以编译成lib,编译的时候需要看看文档,你可能需要到YASM。



但是测试的使用用的是openssl,下面是测试这个开源库所用的几个例子(当然也是通过结合网上的代码得到的,所以谢谢这些作者):

#include <memory.h>#include <stdio.h>#include <stdlib.h>#include <openssl/aes.h>#include <openssl/rc4.h>#pragma comment(lib,"libeay32.lib")#include "iostream"using namespace std;/*int main(int argc, char **argv){unsigned char buf[16];memset(buf,1,sizeof(buf));strcpy((char *)buf, "zengraoli");cout << "current buf value is :" << buf << endl;unsigned char buf2[16];unsigned char buf3[16];unsigned char aes_keybuf[32];memset(aes_keybuf,0,sizeof(aes_keybuf));strcpy((char *)aes_keybuf, "zeng");cout << "current aes_keybuf value is :" << aes_keybuf << endl;AES_KEY aeskey;AES_set_encrypt_key(aes_keybuf,256,&aeskey);AES_encrypt(buf,buf2,&aeskey);cout << "current buf2 value is :" << buf2 << endl;memset(aes_keybuf,0,sizeof(aes_keybuf));strcpy((char *)aes_keybuf, "zeng2");cout << "current aes_keybuf value is :" << aes_keybuf << endl;AES_set_decrypt_key(aes_keybuf,256,&aeskey);AES_decrypt(buf2,buf3,&aeskey);cout << "current buf3 value is :" << buf3 << endl;if(memcmp(buf,buf3,sizeof(buf))==0)printf("test success\r\n");elseprintf("test fail\r\n");}*///#include <openssl/rsa.h>////int main()//{//RSA *r;////int bits=512,ret;////unsigned long e = RSA_3;////BIGNUM *bne;////r = RSA_generate_key(bits, e, NULL, NULL);////RSA_print_fp(stdout, r, 11);////RSA_free(r);////bne = BN_new();////ret = BN_set_word(bne,e);////r = RSA_new();////ret = RSA_generate_key_ex(r, bits, bne, NULL);////if(ret!=1)//{//printf("RSA_generate_key_ex err!\n");////return -1;//}////RSA_free(r);////return 0;////}int main(int argc, char **argv){char code[64]={0};int codelen=sizeof(code);memcpy_s(code,64,"This is secrect",15);printf("before encrypt :%s\r\n",code);unsigned char * outbuffer=(unsigned char *)malloc(codelen);//用指定密钥对一段内存进行加密,结果放在outbuffer中RC4_KEY rc4_key;RC4_set_key(&rc4_key,7,(unsigned char *)"iampassword");RC4(&rc4_key,codelen,(unsigned char *)code,outbuffer);printf("after encrypt :%s\r\n",outbuffer);//用指定密钥对outbuffer中的密文进行解密,结果放回原来的内存memset(code,0,sizeof(code));RC4_set_key(&rc4_key,7,(unsigned char *)"iampassword");//这里必须再次设置密钥RC4(&rc4_key,codelen,outbuffer,(unsigned char *)code);printf("after decrypt :%s\r\n",code);free(outbuffer);return 0;}



这是第一个测试例子,因为我在解密的时候,重新设置了解密的密钥,他是和加密密钥是不同的,一个是zeng1和zeng2,所以解密失败了