Я использую библиотеку Crypto ++:
DH dh;
AutoSeededRandomPool rnd;
SecByteBlock priv(dh.PrivateKeyLength());
SecByteBlock pub(dh.PublicKeyLength());
Это генерирует закрытый и открытый ключ, используя diffie-hellman:
dh.GenerateKeyPair(rnd, priv, pub);
Здесь я конвертирую нечитаемые закрытые и открытые ключи в Integer
(например, 123)
// SecByteBlock -convert-> Integer
Integer a, b;
a.Decode(priv.BytePtr(), priv.SizeInBytes());
b.Decode(pub.BytePtr(), pub.SizeInBytes());
Какой код мне нужно конвертировать обратно из Integer
в SecByteBlock
?
Integer -convert-> SecByteBlock
Чтобы извлечь байты из Integer
Вы используете MinEncodedSize
а также Encode
методы (см. документацию Crypto ++). Обратите внимание на то, что кодировка имеет порядок байтов.
Вот пример метода, чтобы обернуть это (который предполагает Integer
является неподписанным, как применимо в этом случае):
void UnsignedIntegerToByteBlock(const Integer& x, SecByteBlock& bytes)
{
size_t encodedSize = x.MinEncodedSize(Integer::UNSIGNED);
bytes.resize(encodedSize);
x.Encode(bytes.BytePtr(), encodedSize, Integer::UNSIGNED);
}
Вы можете использовать это так:
Integer a;
// ...
SecByteBlock bbA;
UnsignedIntegerToByteBlock(a, bbA);