NXP

Windows下安装openssl方法

2019-07-12 12:29发布

环境 XP 32位 VS2010
一、下载ActivePerl
网址:http://downloads.activestate.com/ActivePerl/
进入网站后截图如下:
点击releases/,进入如下界面:
在上图中选择你想要下载一个版本,我下载的是最后一个5.20.1.2000,点击进去如下图:
我们是WIN7,32位的环境,因此我们选择ActivePerl-5.20.1.2000-MSWin3-x86-64int-298577.msi,这个是直接安装的文件
二、下载openssl源码 网址:http://www.openssl.org/source/
进入网址后界面如下:
我选择了最新的release版本,openssl-1.0.1j.tar.gz下载,之后解压即可。
三、开始菜单找到VS2010文件夹---->Visual studio tools---->Visual studio 命令提示符(2010)
四、进入openssl解压后的源码文件夹
分别执行如下命令:
perl Configure VC-WIN32 msdo_ms nmake -f ms tdll.mak需要注意的是如果需要生产静态库,则把上面的第三句改为如下
nmake -f ms t.mak
五、编译结束后会在openssl目录下生产out32dll目录下生产两个dll两个lib库,如果生产的是静态库那么生产的库在out32目录下的两个lib文件。 下面测试openssl,分为动态库测试和静态库测试: // 动态库测试 nmake -f ms tdll.mk test // 安装动态库 nmake -f ms tdll.mk install // 静态库测试 nmake -f ms t.mk test // 安装静态库 nmake -f ms t.mk install
如果想修改动态库或者静态库的安装目录,请找到openssl目录下ms目录,修改nt.mk或者ntdll.mk文件的如下内容: 默认路径如下(可以修改为自己的安装路径):
INSTALLTOP=usrlocalssl OPENSSLDIR=usrlocalssl

六、编译所用的头文件在openssl源码的include目录下 如果使用VS2010来测试openssl,那么请执行如下动作: 1、将openssl目录下include目录下的openssl目录复制到VS2010的安装目录下的VC目录下的include目录内,这样便可以随意的包含openssl的头文件了!!!

七、VS2010测试静态库过程 1、新建一个WIN32的控制台应用程序testopenssl
2、将out32目录下的libeay32.lib和ssleay32.lib复制到工程根目录
3、设置VS2010:项目---->项目属性---->VC++目录,将库目录栏添加引用的libeay32.lib和ssleay32.lib,如下图
4、代码如下: // testopenssl.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "opensslaes.h" #include "openssl and.h" #pragma comment(lib, "libeay32.lib") #pragma comment(lib, "ssleay32.lib") static void hexdump( FILE *f, const char *title, const unsigned char *s, int l) { int n = 0; fprintf(f, "%s", title); for (; n < l; ++n) { if ((n % 16) == 0) { fprintf(f, " %04x", n); } fprintf(f, " %02x", s[n]); } fprintf(f, " "); } int _tmain(int argc, _TCHAR* argv[]) { unsigned char rkey[16]; AES_KEY key; unsigned char plaintext[AES_BLOCK_SIZE * 4] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'i', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'i', '0', '1', '2', '3', '4', '5', '6', '7', '0', '1', '2', '3', '4', '5', '6', '7', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'i', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'i', '0', '1', '2', '3', '4', '5', '6', '7', '0', '1', '2', '3', '4', '5', '6', '7' }; unsigned char ciphertext[AES_BLOCK_SIZE * 4]; unsigned char checktext[AES_BLOCK_SIZE * 4]; // Init vector. unsigned char iv[AES_BLOCK_SIZE * 4]; // Save vector. unsigned char saved_iv[AES_BLOCK_SIZE * 4]; int nr_of_bits = 0; int nr_of_bytes = 0; // Zero buffer. memset(ciphertext, 0, sizeof ciphertext); memset(checktext, 0, sizeof checktext); //Generate random RAND_pseudo_bytes(rkey, sizeof rkey); RAND_pseudo_bytes(saved_iv, sizeof saved_iv); hexdump(stdout, "== rkey ==", rkey, sizeof(rkey)); hexdump(stdout, "== iv ==", saved_iv, sizeof(saved_iv)); printf(" "); hexdump(stdout, "== plaintext ==", plaintext, sizeof(plaintext)); printf(" "); //Entrypt memcpy(iv, saved_iv, sizeof(iv)); nr_of_bits = 8 * sizeof(rkey); AES_set_encrypt_key(rkey, nr_of_bits, &key); nr_of_bytes = sizeof(plaintext); AES_cbc_encrypt(plaintext, ciphertext, nr_of_bytes, &key, iv, AES_ENCRYPT); hexdump(stdout, "== ciphertext ==", ciphertext, sizeof(ciphertext)); printf(" "); // [yasi] iv is changed in encryption hexdump(stdout, "== iv changed ==", iv, sizeof(iv)); printf(" "); //Decrypt memcpy(iv, saved_iv, sizeof(iv)); // [yasi] without this line, decrypt will fail because iv is changed in encryption nr_of_bits = 8 * sizeof(rkey); AES_set_decrypt_key(rkey, nr_of_bits, &key); nr_of_bytes = sizeof(ciphertext); AES_cbc_encrypt(ciphertext, checktext, nr_of_bytes, &key, iv, AES_DECRYPT); hexdump(stdout, "== checktext ==", checktext, sizeof(checktext)); printf(" "); system("pause"); return 0; }
5、运行结果如下: