gpt4 book ai didi

c# - 在 Mono C# 中生成 key 对并使用它加密数据

转载 作者:太空宇宙 更新时间:2023-11-03 21:32:06 25 4
gpt4 key购买 nike

我有 RSA 模数和指数,我想用这些组件生成一个公钥。然后我想用这个公钥加密数据。

所以我写了这个函数:

public static byte[] EncryptRSA(byte[] rsaModulus, byte[] exponent, byte[] data)
{
byte[] response = null;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
RSAParameters rsaPar = rsa.ExportParameters(false);

rsaPar.Modulus = rsaModulus;
rsaPar.Exponent = exponent;

rsa.ImportParameters(rsaPar);

response = rsa.Encrypt(data, false);

return response;
}

但是 rsa.ExportParameters 方法需要很长时间。

public RSACryptoServiceProvider ()
: this (1024)
{
// Here it's not clear if we need to generate a keypair
// (note: MS implementation generates a keypair in this case).
// However we:
// (a) often use this constructor to import an existing keypair.
// (b) take a LOT of time to generate the RSA keypair
// So we'll generate the keypair only when (and if) it's being
// used (or exported). This should save us a lot of time (at
// least in the unit tests).
}

如您所见,ExportParameters() 方法正在执行 RSA key 对生成,这是一项耗时的操作。

之后我在导入 RSA 参数时遇到异常“私钥/公钥不匹配”。

最佳答案

简单地用创建一个新对象替换导出:

RSAParameters rsaPar = rsa.ExportParameters(false);

RSAParameters rsaPar = new RSAParameters();

这在 .net 中应该仍然很慢,但在单声道中应该很快,因为它会延迟创建 key 。

我还强烈建议使用 OAEP 填充而不是 PKCS#1v1.5 填充。后者有可以在实践中被利用的弱点,除非你仔细地解决它们。所以使用 rsa.Encrypt(data, true) 而不是 rsa.Encrypt(data, false)

关于c# - 在 Mono C# 中生成 key 对并使用它加密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23653288/

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