001数据安全传输-多端协议传输平台:Openssl安装和配置 - EVP代码测试
文章目录
- [001数据安全传输-多端协议传输平台:Openssl安装和配置 - EVP代码测试](#001数据安全传输-多端协议传输平台:Openssl安装和配置 - EVP代码测试)
- [1. 安装](#1. 安装)
-
- [1.1 windows下安装openssl](#1.1 windows下安装openssl)
- [1.2 Linux下安装OpenSSL](#1.2 Linux下安装OpenSSL)
- [2. VS中使用openssl](#2. VS中使用openssl)
- [3. 测试](#3. 测试)
1. 安装
1.1 windows下安装openssl
OpenSSL安装完成。
1.2 Linux下安装OpenSSL
下载安装包, 下载地址: https://github.com/openssl/openssl
源码安装包解压缩
.zip格式:
unzip openssl.zip
.tar.gz格式:
tar zxvf openssl.tar.gz
.tar.bz格式:
tar jxvf openssl.tar.gz
进入解压目录, 安装(可参考安装文件INSTALL):
sql
./config
make
make test (可选)
make install (使用管理员权限执行该命令)
验证是否安装成功
openssl version -a
输出结果
OpenSSL 1.1.1-pre6-dev xx XXX xxxx
built on: Mon Apr 23 10:53:02 2018 UTC
platform: linux-x86_64
options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/lib64/engines-1.1"
Seeding source: os-specific
2. VS中使用openssl
3. 测试
将openssl安装目录/bin目录下(C:\OpenSSL-Win32\bin)的两个动态库拷贝到工作目录下:
libcrypto-1_1.dll
libssl-1_1.dll
C:\OpenSSL-Win32 是我的openssl安装目录
测试代码如下:
c
#define _CRT_SECURE_NO_WARNINGS
//#include <openssl/md5.h> // md5 头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/evp.h>
void getMD5(const char* str, char* result)
{
EVP_MD_CTX* mdctx;
unsigned int md5_digest_len = EVP_MD_size(EVP_md5());//求属性长度
//MD5_CTX ctx;
// 初始化
//MD5_Init(&ctx);
mdctx = EVP_MD_CTX_new();
EVP_DigestInit_ex(mdctx, EVP_md5(), NULL);
// 添加数据
//MD5_Update(&ctx, str, strlen(str));
EVP_DigestUpdate(mdctx, str, strlen(str));
// 计算结果
unsigned char md[16] = { 0 };
//MD5_Final(md, &ctx);
EVP_DigestFinal_ex(mdctx, md, &md5_digest_len);
for (int i = 0; i < 16; ++i)
{
sprintf(&result[i * 2], "%02x", md[i]);
}
EVP_MD_CTX_free(mdctx);
}
int main()
{
char result[33] = { 0 };
getMD5("hello, md5", result);
printf("md5 value: %s\n", result);
system("pause");
return 0;
}
输出结果:
md5 value: 33b3bc8e05b4fcc16bd531dd9adac166