无法创建SymmetricKey

时间:2015-06-23 20:25:41

标签: c++ visual-c++ botan

首先使用的Botan版本是Botan-1.10.9 我正在用Visual C ++编写托管包装器

按照这个例子,我试图从字符串的哈希创建一个SymmetricKey,这样我就可以将它传递给FPE模块的fe1_encrypt方法

fe1_encrypt的签名是

BigInt FPE::fe1_encrypt(const BigInt &n, const BigInt &X, const SymmetricKey &key, const std::vector<byte> &tweak)

我希望我传递给key参数的值是明文的哈希值(不可能解密)所以我真的不关心它是一个SymmetricKey,只需要那个类型,因为该方法需要它作为参数

但是在他们的例子中,他们已经将SymmetricKey传递给他们的哈希方法,该方法返回一个std:vector

然而,SymmetricKey没有采用此类型的构造函数。

有人有什么想法吗?

编辑:我试了这个没有运气

std::vector<byte> re = SHA_1(plaintextAsString);
Botan::OctetString key(re, re.size());

ERROR

错误15错误C2664:'Botan :: OctetString :: OctetString(Botan :: RandomNumberGenerator&amp;,size_t)':无法从'std :: vector&lt; _Ty&gt;'转换参数1到'Botan :: RandomNumberGenerator&amp;'

1 个答案:

答案 0 :(得分:1)

documentation中,SymmetricKey(它只是OctetString的typedef)可以将字节数组和长度作为构造函数。或者,您可以将密钥编码为十六进制字符串。如果您已将密钥设为std::vector<byte>,那么这就足够了:

std::vector<byte> keybytes;
// ...fill the vector...

SymmetricKey key( keybytes.data(), keybytes.size() );

Botan的更高版本定义了另一个构造函数OctetString (const std::vector<byte> &in)