Crypto ++ GetModulus()问题

问题描述 投票:-2回答:1

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

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

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

// 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格式的私钥中找到的模数不同。

任何帮助将不胜感激。

c++ cryptography rsa crypto++
1个回答
0
投票

谢谢大家的回答!我发现了问题所在,并想问您有关库实现的意见。 GetModulus()返回“ Integer”类中的模数。很大的数字是使用机器的字节序存储的(在我的情况下为Intel),即使数字是字节序列也是如此。我没有处理字节序,这就是为什么我放入文件中的模数被拒绝的原因。根据我的知识,我没有考虑字节序,它仅适用于CPU字长相同(或更短)的变量。在这种情况下,我们将一个大整数存储为字节序列。任何意见表示赞赏。

最佳问候

/ Alessandro

© www.soinside.com 2019 - 2024. All rights reserved.