最近在研究信息安全,需要用到OpenSSL库,我用到的开发IDE是VS2012,所以,在这里也记录一下我配置VS2012的OpenSSL库的过程。
下载OpenSSL库
OpenSSL库大家可以自行下载源码然后用ruby进行编译,另外我们也可以选择直接下载编译好的类库。
这里我们利用的后者,在此提供一个下载链接。
下载完成之后解压,比如我的放到了D盘。
新建项目
首先,我们找一段测试代码,在此利用的是 AES 算法的示例。
C++
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 | #include <stdio.h> #include <openssl/aes.h> #include <stdlib.h> #include <string.h>
int main() { unsigned char key[16+1] = "my-key-i-choosed"; // 128bits key (应该是真正的随机数才好) char pt1[16+5+1] = "0123456789abcdef12345"; // 明文 char ct[16+5+1]; // 密文 char pt2[16+5+1]; // 解密后的明文
AES_KEY k; unsigned char iv1[16+1] = {"1023456789abcdef"}; // 16+1,加密用 unsigned char iv2[16+1] = {"1023456789abcdef"}; // 16+1,解密用
{ // single blcok test AES_set_encrypt_key(key, 16*8, &k); AES_encrypt((unsigned char*)pt1, (unsigned char*)ct, &k);
AES_set_decrypt_key(key, 16*8, &k); AES_decrypt((unsigned char*)ct, (unsigned char*)pt2, &k);
if (memcmp(pt1, pt2, 16)==0) puts("AES block ok"); else puts("AES block err"); }
{ // cfb mode (stream mode) int num=0; AES_set_encrypt_key(key, 16*8, &k); AES_cfb128_encrypt((unsigned char*)pt1, (unsigned char*)ct, 16+5, &k, (unsigned char*)iv1, &num, AES_ENCRYPT);
num=0; AES_set_encrypt_key(key, 16*8, &k); // MUST as enc AES_cfb128_encrypt((unsigned char*)ct, (unsigned char*)pt2, 16+5, &k, (unsigned char*)iv2, &num, AES_DECRYPT);
if (memcmp(pt1, pt2, 16+5)==0) puts("AES CFB mode ok"); else puts("AES CFB mode err"); } system("pause"); return 0; } |
接下来新建一个项目,win32控制台程序,空项目,完成。
新建源文件,我取名叫做 aes.cpp,将代码复制进去,可以看到代码最初是在报错的。
好,接下来我们进行环境配置。
环境配置
右键项目名称,弹出一个菜单,选择属性。
在VC++目录选项卡中,添加包含目录和库目录。
在这里,我的包含目录就是刚才解压的OpenSSL目录的include目录,库目录则是lib目录。
注意:分号要是英文分号,英文分号!
接下来选择连接器选项卡,输入libeay.lib和ssleay32.lib两个附加依赖项。
现在右击项目,重新生成。
我们可以看到,程序可以正常生成exe了。
但是直接运行的话会报错,是因为缺少dll文件。
之后,将项目中的libeay32.dll和ssleay32.dll文件放入项
目的debug目录即可。
最后项目的debug目录如下
重新运行exe程序,发现已经正常运行。
至此,VS配置OpenSSL环境的过程已经全部完成。