我正在使用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
答案 0 :(得分:2)
要从Integer
中提取字节,请使用MinEncodedSize
和Encode
方法(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);