繁体   English   中英

Crypto++ GetModulus() 问题

[英]Crypto++ GetModulus() issue

我的目标是生成用于访问 SSH 服务器的 RSA 2048 位密钥对。

问题是从GetModulus()获得的模数不是真正的键的模数。 如果我以 DER 格式导出密钥,则模数字段的内容与GetModulus() function 结果不同。

下面是我生成密钥对的代码:

// Generate keys pair
AutoSeededRandomPool lRnd;
InvertibleRSAFunction lPrms;
lPrms.GenerateRandomWithKeySize(lRnd, 2048);
RSA::PrivateKey lPrvKey(lPrms);
RSA::PublicKey lPubKey(lPrms);

// Convert private key to DER base64
Base64Encoder lB64PrvEncoder;
AlgorithmParameters lPrvPrms = MakeParameters(Name::MaxLineLength (), 64);
lB64PrvEncoder.IsolatedInitialize(lPrvPrms);
lPrvKey.DEREncodePrivateKey(lB64PrvEncoder);
lB64PrvEncoder.MessageEnd();

// Convert public key to base64 openSSH format
Integer lN = lPubKey.GetModulus();
Integer lE = lPubKey.GetPublicExponent();
QByteArray lSSHPubKey;
PubKeyToSSHFormat(lE, lN, lSSHPubKey);

上面, lN与 DER 格式的私钥中的模数不同。

任何帮助将不胜感激。

谢谢大家的回答。 我发现了问题所在,我想请教您对库实现的看法。 GetModulus() 返回“整数”class 中的模数。 这个大数字是使用机器的字节序存储的(在我的例子中是英特尔),即使这个数字是字节序列,我也没有管理字节序。 这就是我放入文件中的模数被拒绝的原因,我没有考虑字节序。 根据我的知识,它仅适用于具有相同大小的 CPU 字长(或更少)的变量。 在这种情况下,我们有一个大的 integer 存储为字节序列。 任何意见表示赞赏。

此致

/亚历山德罗

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM