之前写过一篇基于WSL编译windows版FFmpeg的博文:使用Win10 + WSL编译FFmpeg时的依赖库处理 – https://blog.k-res.net/archives/2771.html,记录了一些基本构建操作和一些问题,但是当时的configure并没有开启很多其他依赖项来激活相关功能,这次要记录的是通过开启openssl的方式,增加如https,rtmps等协议的支持,虽然有WSL的加持,大大简化了windows下编译FFmpeg的复杂度,但到了某些依赖,如这次要说的openssl时,还是有些需要注意的地方的,毕竟WSL的方式实际的本质是在一个同时有linux命令但又能执行windows执行程序的特殊环境下执行构建操作,带来方便的同时也带来了一些特有的麻烦:
Continue reading…OpenSSL
OpenSSL EVP API实现MD5加密C++代码
网上找到的大部分都是旧API,新版OpenSSL推荐使用EVP系列接口,在此记录下EVP方式的MD5哈希实现代码:
#include "openssl/conf.h"
#include "openssl/evp.h"
#include "openssl/err.h"
#include "openssl/engine.h"
void handle_errors()
{
ERR_print_errors_fp(stderr);
abort();
}
std::string md5_str(const std::string & str)
{
const auto * md = EVP_get_digestbyname("MD5");
if (nullptr == md)
{
std::cerr << "Failed to EVP_get_digestbyname MD5!" << std::endl;
return "";
}
unsigned char buf[EVP_MAX_MD_SIZE] = {};
unsigned int olen = EVP_MAX_MD_SIZE;
EVP_MD_CTX * ctx = EVP_MD_CTX_new();
if (nullptr == ctx)
{
std::cerr << "Failed to EVP_MD_CTX_new!" << std::endl;
return "";
}
if (1 != EVP_DigestInit(ctx, md))
{
handle_errors();
return "";
}
if (1 != EVP_DigestUpdate(ctx, str.data(), str.length()))
{
handle_errors();
return "";
}
if (1 != EVP_DigestFinal(ctx, buf, &olen))
{
handle_errors();
return "";
}
EVP_MD_CTX_free(ctx);
return { reinterpret_cast<char*>(buf), olen };
}
int main()
{
OpenSSL_add_all_digests();
const std::string plain = "test1234";
const std::string hash = md5_str(plain);
std::cout << "plain: " << plain << " md5 hash: " << hash << std::endl;
return EXIT_SUCCESS;
}
后面有时间再增加AES等的EVP实现代码