在QT中使用Botan C ++加密文件

时间:2018-07-04 22:17:56

标签: c++ qt encryption botan

我在Windows 10上使用 Qt Creator 4.6.1
基于 Qt 5.10.1 (MSVC 2015, 32 bit)
建立在 May 2 2018 04:24:33
qmakemingw491_32

网络上有一个项目,该项目使用的botanwrapper和包含Botan.pri

完整代码很长,因此无法在此处发布,但可以在http://www.voidrealms.com/index.php?r=source/view&id=1上将其作为zip文件获得。

这一切都能正常工作并加密文件,但是当我将文件带入我的项目时,会出现大量的编译错误,如下所示。

botan.h:9380: error: expected identifier before '(' token
          X942_DH_PARAMETERS = ANSI_X9_42,
          ^

error: expected '}' before '(' token which points to the line

enum Format {
         ANSI_X9_42,
         ANSI_X9_57,
         PKCS_3,

         DSA_PARAMETERS = ANSI_X9_57,
         DH_PARAMETERS = ANSI_X9_42,
         X942_DH_PARAMETERS = ANSI_X9_42, // Error points to here
         PKCS3_DH_PARAMETERS = PKCS_3
      };

const相关的许多错误,例如

error: non-member function 'bool Botan::verify_group(Botan::RandomNumberGenerator&, bool)' cannot have cv-qualifier

bool verify_group(RandomNumberGenerator& rng, bool strong) const;  

指向下面的代码


bool verify_group(RandomNumberGenerator& rng, bool strong) const;

我已经检查了.pro文件中的include,并且我具有与项目相同的文件设置,该项目可以在相同的设置上进行编译和运行。我有一个包含的相同botan.pri文件

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

    win32-msvc* {
        QMAKE_CXXFLAGS += -wd4251 -wd4290 -wd4250
        DEFINES += BOTAN_BUILD_COMPILER_IS_MSVC BOTAN_TARGET_OS_HAS_GMTIME_S
    } else {
        QMAKE_CFLAGS += -fpermissive -finline-functions -Wno-long-long
        QMAKE_CXXFLAGS += -fpermissive -finline-functions -Wno-long-long
    }
    LIBS += -ladvapi32 -luser32
}

我已阅读到删除const会删除1个或更多个错误,但是我不明白为什么在愉快地编译botan.h并运行构建并加密文件的同一设置上会破坏此错误。有人可以帮助您开始解决此问题。帮助表示赞赏。预先感谢。

1 个答案:

答案 0 :(得分:1)

问题是Windows API定义了与此枚举冲突的宏X942_DH_PARAMETERS。 (实际上,在Botan的更高版本中,该枚举已重命名,以避免出现此问题https://github.com/randombit/botan/issues/482。)

在包含Botan标头之前,您可以使用#undef X942_DH_PARAMETERS解决该问题。