gpt4 book ai didi

c++ - 使用 CryptoPP::RSA 时无法将 AutoSeededRandomPool 作为参数传递,错误 C2729

转载 作者:行者123 更新时间:2023-11-30 05:20:32 24 4
gpt4 key购买 nike

我正在使用 Crypto++ 实现 RSA。我正在尝试生成一对 RSA key (公钥和私钥)来像这样提交文件。

当我把所有代码都放在main中时,代码可以完美运行。当我尝试将它拆分为一个函数并将 AutoSeededRandomPool 对象作为参数传递时,如下所示:

int generateKeyToFile(
AutoSeededRandomPool rnd,
string publicKeyFileName, string privateKeyFileName){
try
{
RSA::PrivateKey rsaPrivate;
rsaPrivate.GenerateRandomWithKeySize(rnd, 3072);

RSA::PublicKey rsaPublic(rsaPrivate);
EncodePrivateKey(privateKeyFileName, rsaPrivate);
EncodePublicKey(publicKeyFileName, rsaPublic);

cout << "Successfully generated and saved RSA keys" << endl;
return 1;
}

catch (CryptoPP::Exception& e)
{
cerr << e.what() << endl;
return -1;
}
}

构建项目时出现错误:

error C2719: 'rnd': formal parameter with __declspec(align('8')) won't be aligned

我无法从 Google 找到此错误的确切 Crypto++ 相关结果,但我找到了 error code C2719 的一些结果.其内容:

'parameter': formal parameter with __declspec(align('#')) won't be aligned

The align __declspec modifier is not permitted on function parameters. Function parameter alignment is controlled by the calling convention used. For more information, see Calling Conventions.

The following sample generates C2719 and shows how to fix it:

// C2719.cpp  
void func(int __declspec(align(32)) i); // C2719
// try the following line instead
void func(int i);

我还不知道将这个“解决方案”应用到我的案例中。

似乎 AutoSeededRandomPool 不能作为参数传递。有办法解决这个问题吗?

最佳答案

int generateKeyToFile(
AutoSeededRandomPool rnd,
string publicKeyFileName, string privateKeyFileName){
...
}

使用引用:

int GenerateKeyToFile(
RandomNumberGenerator& rnd,
const string& publicKeyFileName,
const string& privateKeyFileName)
{
...
}

我不确定 AutoSeededRandomPool 是否可复制构造。我认为事情正在按预期进行,因为您可能不应该复制一个。只需通过引用或指针传递它。

关于c++ - 使用 CryptoPP::RSA 时无法将 AutoSeededRandomPool 作为参数传递,错误 C2729,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40623607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com