Botan的编译及MD5计算

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工程编译即可。

Botan的编译及MD5计算_第1张图片

即使不使用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 
#include 
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 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<


你可能感兴趣的:(C++,算法与仿真)