Windows下安装openssl方法

环境

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
ms\do_ms
nmake -f ms\ntdll.mak
需要注意的是如果需要生产静态库,则把上面的第三句改为如下

nmake -f ms\nt.mak

五、编译结束后会在openssl目录下生产out32dll目录下生产两个dll两个lib库,如果生产的是静态库那么生产的库在out32目录下的两个lib文件。

下面测试openssl,分为动态库测试和静态库测试:

// 动态库测试
nmake -f ms\ntdll.mk test
// 安装动态库
nmake -f ms\ntdll.mk install

// 静态库测试
nmake -f ms\nt.mk test
// 安装静态库
nmake -f ms\nt.mk install

如果想修改动态库或者静态库的安装目录,请找到openssl目录下ms目录,修改nt.mk或者ntdll.mk文件的如下内容:

默认路径如下(可以修改为自己的安装路径):

INSTALLTOP=\usr\local\ssl

OPENSSLDIR=\usr\local\ssl


六、编译所用的头文件在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 "openssl\aes.h"
#include "openssl\rand.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, "\n%04x", n);  
		}  
		fprintf(f, " %02x", s[n]);  
	}  

	fprintf(f, "\n");  
} 

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("\n");  

	hexdump(stdout, "== plaintext ==",  
		plaintext,  
		sizeof(plaintext));  
	printf("\n");  

	//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("\n");  
	// [yasi] iv is changed in encryption  
	hexdump(stdout, "== iv changed ==",  
		iv,  
		sizeof(iv));  
	printf("\n");  

	//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("\n");  
	system("pause");

	return 0;  
}


5、运行结果如下:


openSSL工具生成密钥使用说明: 安装后进入OpenSSL工具,输入如下命令: • Linux用户(以Ubuntu为例): $ openssl 进入OpenSSL程序 OpenSSL> genrsa -out rsa_private_key.pem 1024 生成私钥 OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt Java开发者需要将私钥转换成PKCS8格式 OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 生成公钥 OpenSSL> exit 退出OpenSSL程序 • Windows用户在cmd窗口中进行以下操作: C:\Users\Hammer>cd C:\OpenSSL-Win32\bin 进入OpenSSL安装目录 C:\OpenSSL-Win32\bin>openssl.exe 进入OpenSSL程序 OpenSSL> genrsa -out rsa_private_key.pem 1024 生成私钥 OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem (备注:Java开发者需要将私钥转换成PKCS8格式) OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 生成公钥 OpenSSL> exit 退出OpenSSL程序 ② 然后,开发者可以在当前文件夹中(OpenSSL运行文件夹),看到app_private_key.pem(开发者RSA私钥)、app_private_key_pkcs8.pem(pkcs8格式开发者RSA私钥)和app_public_key.pem(开发者RSA公钥)3个文件。开发者将私钥保留,将公钥配置到天机开放平台-配置账号,用于验证签名。 注意:对于使用Java的开发者,将pkcs8在console中输出的私钥去除头尾、换行和空格,作为开发者私钥,对于.NET和PHP的开发者来说,无需进行pkcs8命令行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值