0

在此示例代码中

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 脚本编译并且在调试模式下没有排除任何模块(用所有东西构建它)。

4

2 回答 2

1

我刚刚检查了一下,看起来 Botan v. 1.10.9没有unlock. 你有两个选择。

1.10.9 版本有另一种final方法,您可以在其中传递一个向量byte作为参考来获取返回值。

就像是:

byte out[hash.output_length()];
hash.final(out);

另一种选择是从转换SecureVectorstd::vector.

SecureVector<byte> temp = hash.final();
std::vector<byte> ret(temp.begin(), temp.end());

根据我的应用程序,我会选择其中一个。

.

以防万一有人提出这个问题并使用 Botan 1.11。

从tounlock转换的方法在 header 中。此外,类 SHA_160 有另一种方法,您可以将 a 作为参数传递以获取输出。使用这种方法,您将不需要解锁功能。SecureVectorstd::vectorsecman.hfinalstd::vector<byte>

于 2015-06-23T15:16:46.170 回答
0

本教程使用这个

using namespace Botan;

也许这是一个命名空间问题。您也可以将 Botan 命名空间声明为“使用”,或者您使用Botan::unlock而不是解锁。

我推荐第二个,即使它看起来更长。这很值得!

于 2015-06-22T19:07:47.763 回答