本文主要是介绍在项目中使用到了加解密的函数,使用到了openssl,做点记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原文来自:http://blog.csdn.net/zengraoli/article/details/17039981
其实在项目中使用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");
- else
- printf("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,所以解密失败了
这篇关于在项目中使用到了加解密的函数,使用到了openssl,做点记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!