将Integer转换回SecByteBlock?

时间:2015-04-03 18:50:40

标签: c++ cryptography crypto++ diffie-hellman

我正在使用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

1 个答案:

答案 0 :(得分:2)

要从Integer中提取字节,请使用MinEncodedSizeEncode方法(see the Crypto++ documentation)。请注意,编码是big-endian。

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