在此示例代码中
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:'unlock':找不到标识符
编辑:我的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脚本编译,并没有在调试模式下排除任何模块(用所有内容构建)。
答案 0 :(得分:1)
我刚检查过,看起来像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。
要从SecureVector
转换为std::vector
的方法unlock
位于标题secman.h
中。
此外,SHA_160类还有另一个final
方法,您可以将std::vector<byte>
作为参数传递以获取输出。使用此方法,您将不需要解锁功能。
答案 1 :(得分:0)
本教程使用此
using namespace Botan;
可能是命名空间问题。您也可以将Botan命名空间声明为&#34;使用&#34;,或者使用Botan::unlock
而不是解锁。
我推荐第二个,即使看起来更长。这是值得的!