需求

希望在 C++ 中使用 sha1 加密。

解决

openssl 也可以提供 sha1 加密,但是听说有滴血漏洞,所以考虑使用 cryptopp.

下载 cryptopp 之后,需要在 virtual studio 中编译,但是因为没有安装,并且我用的还是 mingw 编译环境,所以尝试在 qt 中编译。

  1. 使用 qt 命令行,切换到源码目录,然后 qmake --project 来生成 qt 工程。
  2. 使用 qt creator 打开之后,修改 pro 文件,把 TEMPLATE = app 改为 TEMPLATE = lib, 重新编译。
  3. 编译会有很多报错,基本都是 intel 的一些指令没有,可以去 https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#expand=3828 中搜索错误信息,然后找 CPUID Flags 这一行对应的提示,在这个提示前增加 -m 作为 flag, 放到 pro 文件中. 如下:
QMAKE_CXXFLAGS += "-msse2"

有太多的报错, 所以暂时先放弃了,等后面有时间再搞。获取可以尝试安装 vs, 然后配置为 mingw 编译环境,也是一种办法。或者找找单纯的 sha1 加密库。

参考

clibs/sha1

C++ cryptopp::SHA1类代码示例

C/C++ Crypto密码库调用方法

Crypto++® Library 8.7

SHA-1算法详解和C++实现

SHA-1算法解释与C/C++实现

C++实现SHA-1加密

C/C++编程:openssl使用(win10+vs2019)

PaddleGitee / cryptopp

Crypto++安装和简单使用RSA加密解密

Crypto++的安装及使用

Qt 5.8.3 部署/添加 Crypto++第三方库(5.6.5版本)

如何在makefile中添加-lws2_32

SSE优化指令集编译错误: inlining failed in call to always_inline ‘xxx’: target specific option mismatch xxx

SSE优化指令集编译错误: inlining failed in call to always_inline ‘xxx’: target specific option mismatch xxx

解决error: inlining failed in call to always_inline ‘int _mm_popcnt_u32(unsigned int)’

Visual Studio 2022使用MinGW来编译调试C/C++程序

SHA1在线计算 - StrErr.com