windows下VS2017使用openssl库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liudongdong19/article/details/84255554

OpenSSL开发环境配置教程分享给大家,具体内容如下

【环境信息】

Windows 10 Enterprise Version 10.0.15063 

下载地址:http://www.itellyou.cn/) 

Visual Studio Enterprise 2017 Version 15.2(26430.12) 

下载地址:https://www.visualstudio.com/downloads) 

OpenSSL v1.1.0f 

下载地址:https://slproweb.com/products/Win32OpenSSL.html

【提醒事项】

1。安装OpenSSL有两种方法,第一种为下载OpenSSL源代码并由自己编译后使用;第二种为下载已编译好的安装包,安装后直接可以使用。因第一种方法十分繁琐,需要安装Ruby进行编译,同时编译过程中可能产生各种各种的问题,因此在此采用第二种方法 
2。每次新建工程之后都要配置一下OpenSSL开发环境 
3。本人用的英文环境(英文操作系统+英文软件),因此操作界面语言可能会和中文环境有些不同,但并不影响功能

【具体步骤】

1。下载编译好的OpenSSL安装包(下载地址见上方),此处有Win32和Win64可选,这里的位数指的是你调用OpenSSL开发出来的软件的位数版本,而不是你计算机的位数。开发32位软件选择Win32,64位选择Win64,如果同时需要开发32位和64位的则下载两个。确定好位数后,下载Win32/64 OpenSSL v1.1.0f(版本号可能会因更新而有所不同),“Light版”为“轻量版”,即只包含了核心功能的版本,本文演示的为“非Light版” 

2。下载完后打开安装,选择安装位置,64位和32位不要安装在同一个目录下 

这里写图片描述

3。选择把dll复制到OpenSSL目录下(主要是为了以后好找,如果选择复制到Windows系统目录下,天知道复制到哪里去了。。。) 

这里写图片描述

4。安装完成后,如果有捐款意向的可以捐款(别误会我不是在打广告。。。即使你捐款了我也拿不到一分钱),没有意向则取消掉钩,然后点“Finish” 

这里写图片描述

libssl.lib  libcrypto.lib 

 

【测试使用】

#include <iostream>
#include <fstream>
#include <stdio.h>  
#include <string.h>
#include <openssl/des.h>
using namespace std;
#pragma comment(lib,"libssl.lib")
#pragma comment(lib,"libcrypto.lib")

int test1(int argc, char **argv)
{
	DES_cblock key;
	//随机密钥  
	DES_random_key(&key);

	DES_key_schedule schedule;
	//转换成schedule  
	DES_set_key_checked(&key, &schedule);

	const_DES_cblock input = "hehehe";
	DES_cblock output;

	printf("cleartext: %s\n", input);

	//加密  
	DES_ecb_encrypt(&input, &output, &schedule, DES_ENCRYPT);
	printf("Encrypted!\n");

	printf("ciphertext: ");
	int i;
	for (i = 0; i < sizeof(input); i++)
		printf("%02x", output[i]);
	printf("\n");

	//解密  
	DES_ecb_encrypt(&output, &input, &schedule, DES_DECRYPT);
	printf("Decrypted!\n");
	printf("cleartext:%s\n", input);
	system("pause");
	return 0;
} 
  
int test2(int argc, char** argv)  
{  
      const char *keystring = "this is my key";  
      DES_cblock key;  
      DES_key_schedule key_schedule;  
  
      //生成一个 key  
      DES_string_to_key(keystring, &key);  
      if (DES_set_key_checked(&key, &key_schedule) != 0) {  
          printf("convert to key_schedule failed.\n");  
          return -1;  
      }  
  
      //需要加密的字符串  
      unsigned char input[] = "yaochengaoylakjsdlfjasl";  
      size_t len = (sizeof(input)+7)/8 * 8;    
      unsigned char *output =new unsigned char[len+1];  
      //IV  
      DES_cblock ivec;  
  
      //IV设置为0x0000000000000000  
      memset((char*)&ivec, 0, sizeof(ivec));  
       
      //加密  
      DES_ncbc_encrypt(input, output, sizeof(input), &key_schedule, &ivec, DES_ENCRYPT);  
  
      //输出加密以后的内容  
      for (int i = 0; i < len; ++i)  
         printf("%02x", output[i]);  
      printf("\n");  
  
      memset((char*)&ivec, 0, sizeof(ivec));  
  
      //解密  
      DES_ncbc_encrypt(output, input, len, &key_schedule, &ivec, 0);  
        
      printf("%s\n", input);  
  
    //  output=NULL;  
	  delete output;
	  system("pause");
} 

猜你喜欢

转载自blog.csdn.net/liudongdong19/article/details/84255554