曾静的技术博客

但行好事,莫问前程.

嗨,我是曾静 (@devzeng),目前暂居深圳。


这是我用来记录平日学习笔记的地方,欢迎您的访问.

Windows环境下OpenSSL的编译和使用

OpenSSL是目前使用的非常广泛的加密算法库,基本上我们日常使用到的HTTPS、SSH都离不开它的身影。本文就在Windows环境下面编译最新版本的OpenSSL的步骤进行整理。

oepnssl-logo.png

编译OpenSSL

1.编译环境准备

(1) perl

OpenSSL的编译需要使用到perl的环境,如果之前安装过可以跳过此步骤。

1) 下载perl安装包

根据操作系统的版本下载对应最新版本的perl(当前最新的版本是5.22.3.2204),下载地址是:https://www.activestate.com/activeperl/downloads

windows-perl-download-page.png

2) 配置环境变量

前往“计算机 -> 右键-属性 -> 高级系统设置 -> 环境变量”将C:\Perl\site\bin;C:\Perl\bin;(Perl安装路径)添加到环境变量(如果前面有其他的配置使用;进行拼接)

配置完成之后再cmd中输入perl -version,如果正确输出如下信息表示成功安装。

This is perl 5, version 22, xxxxxx
(2) openssl

前往OpenSSL的官网下载最新最新版本的源码(当前最新的版本是openssl-1.1.0e),下载完成之后解压到D盘。下载界面如下:

(3) IDE安装

本文使用的是Visual Studio 2010版本

2.编译OpenSSL

打开命令行工具,cd到OpenSSL源码所在路径。

(1) 配置编译模式
perl Configure VC-WIN32 no-asm --prefix=d:\openssl_lib

说明:

  • Configure 后面的选项可选值有 VC-WIN32(32位) | VC-WIN64A(64位AMD) | VC-WIN64I(64位Intel) | VC-CE(Windows CE)
  • prefix: 表示生成的lib文件存放路径
(2) 编译生成

1) 编译源码

nmake

2) 测试

nmake test

3) 生成可执行文件

nmake install

执行完成上面的三个步骤之后在d:\openssl_lib这个目录下面会生成四个文件夹(include/lib/bin/html):

  • include目录下面存放的shi头文件
  • lib目录是生成的静态库文件,文件的后缀是.lib
  • bin目录下面存放的是dll文件和exe文件
  • html目录下面存放的是文档

OpenSSL的简单使用

1.注册dll文件

执行下面两个步骤实现dll文件注册:

1) 将bin目录下面的libcrypto-1_1.dll文件拷贝到C:\Windows\System32目录下面

2) 在运行(win+R)中输入regsvr32 libcrypto-1_1.dll

2.创建示例项目

使用Visual Studio 2010创建一个C++的CLR命令行控制台程序

3.配置OpenSSL依赖

需要配置两个内容包含目录和库目录,项目名称右键 -> 配置属性 -> VC++目录按照下面的配置方式进行配置:

visual-studio-config.png

4.示例代码

下面以SHA256加密算法为例进行测试

(1) 头文件
#include <openssl/sha.h>
(2) 链接库
#pragma comment(lib, "libcrypto.lib")
(2) 示例代码
void sha256(char* string, char outputBuffer[64])
{
    unsigned char hash[SHA256_DIGEST_LENGTH];
    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, string, strlen(string));
    SHA256_Final(hash, &sha256);
    int i = 0;
    for(i = 0; i < SHA256_DIGEST_LENGTH; i++)
    {
        sprintf(outputBuffer + (i * 2), "%02x", hash[i]);
    }
}

参考资料

1、VS2010中编译openssl的步骤和使用设置

2、OpenSSL在Windows下的编译安装

3、在 Windows下用 Visual Studio 编译 OpenSSL 1.1.0

4、OpenSLL

5、在VS2010项目中引用Lib静态库(以Openssl为例)

最近的文章

Jersey整合Swagger自动生成API文档

之前写过一篇文章《使用Jersey开发REST服务》,里面简单介绍了使用Jersey来快速创建REST的API服务。REST API都是要对外提供服务的,那么文档是必须的。经常要给其他人员提供文档,每次都是要不断的维护word/excel的文件,挺麻烦的。能不能做到自动生成呢?答案是可以的,swagger就是这样的一个组件帮助我们快速生成,让开发人员只需要关注功能的开发即可,后续的工作就交给Swagger就好了。下面简单介绍下如何在Jersey的项目中集成Swagger。1、pom.xml...…

Java继续阅读
更早的文章

使用Jersey开发REST服务

REST 是英文 Representational State Transfer 的缩写,有中文翻译为“表述性状态转移”。REST 这个术语是由 Roy Fielding 在他的博士论文 《 Architectural Styles and the Design of Network-based Software Architectures 》中提出的。REST 并非标准,而是一种开发 Web 应用的架构风格,可以将其理解为一种设计模式。REST 基于 HTTP,URI,以及 XML 这些...…

Java继续阅读