将 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
中提取字节,您可以使用 MinEncodedSize
和 Encode
方法 (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);
我正在使用 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
中提取字节,您可以使用 MinEncodedSize
和 Encode
方法 (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);