在此示例代码中
http://botan.randombit.net/manual/fpe.html
我试图在Visual C ++托管包装中使用一种方法,但是在“解锁”上我不断收到编译错误,这是什么? (可能是互斥体::解锁)并且我该如何解决该错误?
std::vector<byte> sha1(const std::string& acct_name)
{
SHA_160 hash;
hash.update(acct_name);
return unlock(hash.final());
}
错误16错误C3861:“解锁”:找不到标识符
编辑:我的Stdafx.h文件现在看起来像这样,但仍未编译(即使包含secmem.h之后)
#pragma once
#include <botan/botan.h>
#include <botan/fpe_fe1.h>
#include <botan/sha160.h>
#include <botan/secmem.h>
#include <stdexcept>
#include <vector>
编辑:其他信息-我正在使用的Botan库的版本是1.10.9版(最新的稳定版)。我使用python脚本进行编译,并且没有在调试模式下排除任何模块(使用所有组件构建)。
最佳答案
我刚刚检查了一下,发现Botan v。1.10.9没有unlock
。您有两个选择。
版本1.10.9具有另一个final
方法,您可以在其中传递byte
向量作为参考来获取返回值。
就像是:
byte out[hash.output_length()];
hash.final(out);
另一种选择是将
SecureVector
转换为std::vector
。SecureVector<byte> temp = hash.final();
std::vector<byte> ret(temp.begin(), temp.end());
根据我的应用程序,我会选择一个。
。
以防万一有人问到这个问题并且正在使用Botan 1.11。
从
unlock
转换为SecureVector
的方法std::vector
在标头secman.h
中。此外,类SHA_160还有另一个
final
方法,您可以在其中传递std::vector<byte>
作为参数来获取输出。使用此方法,您将不需要解锁功能。关于c++ - 标识符“解锁”未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30987320/