Botan的编译及MD5计算
2016-12-10 13:42
399 查看
Botan是一款开源的加密算法库,编译Botan可以从其官网下载源代码并编译。不过,有更好的方式。
Qt Creator就用到了Botan库, 于是只要下载Qt Creator源代码在其中的qt-creator-opensource-src-4.1.0\src\libs\3rdparty\botan就可以找到Botan。
只需要其中的三个文件botan.cpp,botan.h,botan.pri。加入Qt工程编译即可。
即使不使用Qt,可以参考botan.pri,将宏加入编译器,稍微修改代码(将几个Qt宏稍微改改),也可以轻松编译。
md5测试代码(将Botan::LibraryInitializer写到main)
Qt Creator就用到了Botan库, 于是只要下载Qt Creator源代码在其中的qt-creator-opensource-src-4.1.0\src\libs\3rdparty\botan就可以找到Botan。
只需要其中的三个文件botan.cpp,botan.h,botan.pri。加入Qt工程编译即可。
即使不使用Qt,可以参考botan.pri,将宏加入编译器,稍微修改代码(将几个Qt宏稍微改改),也可以轻松编译。
#botan.pri INCLUDEPATH *= $$PWD/.. HEADERS += $$PWD/botan.h equals(USE_SYSTEM_BOTAN, 1) { DEFINES += USE_SYSTEM_BOTAN CONFIG += link_pkgconfig PKGCONFIG += botan-1.10 } else { SOURCES += $$PWD/botan.cpp CONFIG += exceptions DEPENDPATH += . DEFINES += BOTAN_DLL= unix:DEFINES += BOTAN_TARGET_OS_HAS_GETTIMEOFDAY BOTAN_HAS_ALLOC_MMAP \ BOTAN_HAS_ENTROPY_SRC_DEV_RANDOM BOTAN_HAS_ENTROPY_SRC_EGD BOTAN_HAS_ENTROPY_SRC_FTW \ BOTAN_HAS_ENTROPY_SRC_UNIX BOTAN_HAS_MUTEX_PTHREAD BOTAN_HAS_PIPE_UNIXFD_IO *linux*:DEFINES += BOTAN_TARGET_OS_IS_LINUX BOTAN_TARGET_OS_HAS_CLOCK_GETTIME \ BOTAN_TARGET_OS_HAS_DLOPEN BOTAN_TARGET_OS_HAS_GMTIME_R BOTAN_TARGET_OS_HAS_POSIX_MLOCK \ BOTAN_HAS_DYNAMICALLY_LOADED_ENGINE BOTAN_HAS_DYNAMIC_LOADER macx:DEFINES += BOTAN_TARGET_OS_IS_DARWIN *g++*:DEFINES += BOTAN_BUILD_COMPILER_IS_GCC *clang*:DEFINES += BOTAN_BUILD_COMPILER_IS_CLANG *icc*:DEFINES += BOTAN_BUILD_COMPILER_IS_INTEL CONFIG(x86_64):DEFINES += BOTAN_TARGET_ARCH_IS_X86_64 win32 { DEFINES += BOTAN_TARGET_OS_IS_WINDOWS \ BOTAN_TARGET_OS_HAS_LOADLIBRARY BOTAN_TARGET_OS_HAS_WIN32_GET_SYSTEMTIME \ BOTAN_TARGET_OS_HAS_WIN32_VIRTUAL_LOCK BOTAN_HAS_DYNAMICALLY_LOADED_ENGINE \ BOTAN_HAS_DYNAMIC_LOADER BOTAN_HAS_ENTROPY_SRC_CAPI BOTAN_HAS_ENTROPY_SRC_WIN32 \ BOTAN_HAS_MUTEX_WIN32 msvc { QMAKE_CXXFLAGS_EXCEPTIONS_ON = -EHs QMAKE_CXXFLAGS += -wd4251 -wd4290 -wd4250 -wd4297 -wd4267 -wd4334 DEFINES += BOTAN_BUILD_COMPILER_IS_MSVC BOTAN_TARGET_OS_HAS_GMTIME_S _SCL_SECURE_NO_WARNINGS } else { QMAKE_CFLAGS += -fpermissive -finline-functions -Wno-long-long QMAKE_CXXFLAGS += -fpermissive -finline-functions -Wno-long-long } LIBS += -ladvapi32 -luser32 } unix:*-g++* { QMAKE_CFLAGS += -fPIC -fpermissive -finline-functions -Wno-long-long QMAKE_CXXFLAGS += -fPIC -fpermissive -finline-functions -Wno-long-long } linux*|freebsd* { LIBS += -lrt $$QMAKE_LIBS_DYNLOAD } }
md5测试代码(将Botan::LibraryInitializer写到main)
#include <iostream> #include <botan/botan.h> void MainWindow::testMD5() { /* https://botan.randombit.net/doxygen/ Hash Functions Blake2b, GOST 34.11, Keccak, MD4, MD5, RIPEMD-160, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512, Skein-512, Tiger, Whirlpool */ using Botan::byte; using Botan::HashFunction; std::unique_ptr<HashFunction> md5Hash{ Botan::get_hash("MD5") }; auto ans=md5Hash->process((const byte *)"12345",5); std::cout<<"md5 for 12345 : "; for (const auto varI:ans) { std::cout<<std::hex<<int(varI); } std::cout<< std::endl; constexpr byte right_ans[]={0x82,0x7c,0xcb,0x0e,0xea,0x8a,0x70,0x6c, 0x4c,0x34,0xa1,0x68,0x91,0xf8,0x4e,0x7b}; test_assert(ans.size()==16,"md5 size error"); test_assert(Botan::same_mem(right_ans,ans.begin(),16),"md5 is not right"); }
相关文章推荐
- 网上流传的“MD5模块”计算错误的分析
- 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数
- python实例26[计算MD5]
- 计算可能的编译结果数
- [C#] 计算大文件的MD5的两种方式(直接调用方法计算,流计算-适用于大文件)
- 计算的本质:有关表示,编译,赋值,异步和流的杂谈
- 高性能计算--hpcc的编译出解决
- MD5加载编译问题
- 使用wxPython建立一个计算文件md5的GUI工具
- MD5计算
- Golang计算MD5
- 最简单的计算MD5方法
- 反射应用-编译字符串获取计算结果
- ubuntu10.04下计算md5
- 使用webrtc中的MD5 API计算某个文件的MD5值
- MD5计算(Python3)
- 转 这种方法可以免去自己计算大文件md5 的麻烦
- C#计算字符串哈希值(MD5、SHA)的方法小结
- 小巧好用的哈希计算器,支持文件拖放,速度很快,可以计算文件的 MD5、SHA1、CRC32 的值。
- Windows编译出的Botan库运行起来崩溃问题的解决