我有一台服务器。我想添加AES加密。 我已经尝试过使用Crypto ++,经过大量搜索后编译但是它总是抛出来自" CryptoPP :: selfTestFailure"的异常。 我已经在fips140.cpp文件中读到了某个与此定义有关的内容:
// Define this to 1 to turn on FIPS 140-2 compliance features, including additional tests during
// startup, random number generation, and key generation. These tests may affect performance.
#ifndef CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2
#define CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2 0
endif
但是当我将define更改为1时,我从不编译DLL的项目。 我做错了什么? /有没有其他方法植入AES算法?
答案 0 :(得分:2)
...经过大量搜索后编译但总是抛出来自“CryptoPP :: selfTestFailure”的异常。我已经在文件fips140.cpp:
中读到了某个与此定义有关的内容
FIPS DLL是一个特殊用途的Windows DLL,有很多限制。其中一个限制是运营环境或OE。 OE包括操作系统版本和服务包级别。
对于FIPS DLL,这里是批准的OE:
如果操作系统错误或Service Pack级别错误,则可能导致自检失败。它可能导致失败的原因之一是因为DLL从C ++运行时定位某些特定的内存函数。如果找不到它们,则抛出异常。
有一个不太明显的依赖,这是Visual Studio的版本。已验证的库的最后一个版本是5.3,对于它,您需要Visual Studio 2005。
通常你现在要做的就是建立一个具有特定操作系统,服务包级别和Visual Studio的构建/测试机器,然后构建并测试它。然后,当您在生产中安装Crypto ++和您的程序时,使用compatibility tab来提供运行时OE。
当我将define更改为1时,我从中获取DLL的项目不进行编译。我做错了什么?
如果您需要或需要更具体的答案,那么您需要提供更多信息,例如您的Windows版本,您的Visual Studio版本和调用堆栈。
我还鼓励你尽可能避免使用FIPS DLL。大多数用户没有意识到它的特殊用途,也不知道如何正确使用它。它是一种痛苦的屁股,也是一直存在的问题。
如果需要DLL,则创建一个包装DLL,用于导出要导出的符号。然后,链接到Crypto ++库的静态版本。