Невозможно создать SymmetricKey
Прежде всего, я использую версию Botan - Botan-1.10.9, и я пишу управляемую оболочку в Visual C++.
Следуя этому примеру, я пытаюсь создать SymmetricKey из хеша строки, чтобы я мог передать его в метод fe1_encrypt модуля FPE
Подпись fe1_encrypt является
BigInt FPE::fe1_encrypt(const BigInt &n, const BigInt &X, const SymmetricKey &key, const std::vector<byte> &tweak)
Я хочу, чтобы значение, которое я передаю в параметр ключа, было хэшем открытого текста (без возможности расшифровки). Поэтому на самом деле мне все равно, что это SymmetricKey, просто нужен этот тип, потому что метод требует его в качестве параметра.
Но в их примере они передали SymmetricKey свой хеш-метод, который возвращает std: vector
Однако не существует конструктора для SymmetricKey, который принимает этот тип.
У кого-нибудь есть идеи?
РЕДАКТИРОВАТЬ: я попробовал это без удачи
std::vector<byte> re = SHA_1(plaintextAsString);
Botan::OctetString key(re, re.size());
ОШИБКА
Ошибка 15 ошибка C2664: "Botan::OctetString::OctetString(Botan::RandomNumberGenerator &,size_t)": невозможно преобразовать параметр 1 из "std::vector<_Ty>" в "Botan:: RandomNumberGenerator &"
1 ответ
В документацииSymmetricKey
(который является просто typedef для OctetString
) может принимать байтовый массив и длину в качестве конструктора. Кроме того, вы можете закодировать ключ в виде шестнадцатеричной строки. Если у вас уже есть ключ как std::vector<byte>
тогда этого должно хватить:
std::vector<byte> keybytes;
// ...fill the vector...
SymmetricKey key( keybytes.data(), keybytes.size() );
Более поздние версии Botan определяют другой конструктор OctetString (const std::vector<byte> &in)
,