您的位置:首页 > 编程语言 > C语言/C++

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宏稍微改改),也可以轻松编译。

#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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++11 botan