将 Integer 转换回 SecByteBlock?

Convert Integer back to SecByteBlock?

我正在使用 Crypto++ 库:

DH dh;
AutoSeededRandomPool rnd;
SecByteBlock priv(dh.PrivateKeyLength());
SecByteBlock pub(dh.PublicKeyLength());

这会使用 diffie-hellman 生成私钥和 public 密钥:

dh.GenerateKeyPair(rnd, priv, pub);

这里我将不可读的私钥和 public 密钥转换为 Integer (num e.g. 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 中提取字节,您可以使用 MinEncodedSizeEncode 方法 (see the Crypto++ documentation)。请注意,编码是大端。

这是一个总结方法的示例(假设 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);