简体   繁体   English

RSACryptoServiceProvider.Decrypt() 可以返回不正确的数据吗?

[英]Can RSACryptoServiceProvider.Decrypt() return incorrect data?

Can System.Security.Cryptography.RSACryptoServiceProvider.Decrypt() output incorrect data? System.Security.Cryptography.RSACryptoServiceProvider.Decrypt() output 数据是否不正确? Or will it always throw Exception with message "The parameter is incorrect" or any other Exception, whether it's unable to decrypt in a proper way?或者它是否总是会抛出带有消息“参数不正确”或任何其他异常的异常,无论它是否无法以正确的方式解密?

Situation is:情况是:

  1. I generate RSA pair using RSACryptoServiceProvider.ExportParameters(true)我使用RSACryptoServiceProvider.ExportParameters(true)生成 RSA 对
  2. I send modulus and exponent to the other side我将模数和指数发送到另一边
  3. I receive encrypted data我收到加密数据
  4. I successfully decrypt data with the same RSA parameters without any errors, but get data in length of 30 bytes我使用相同的 RSA 参数成功解密数据,没有任何错误,但得到的数据长度为 30 字节
  5. The other side does state, that plain data was of 32 bytes length另一边是 state,纯数据长度为 32 字节

Is this even possible?这甚至可能吗? What am I missing here?我在这里想念什么?

using System.Security.Cryptography;

var provider = new RSACryptoServiceProvider(2048);
var rsaParams = provider.ExportParameters(true);
rsaParams.Exponent = new byte[] { 0x65 };

byte[] publicKey = rsaParams.Modulus;

// Send public key to the other side with exponent 0x65, 
// Decrypt received data

byte[] decryptedData = provider.Decrypt(encryptedData, false);

You cannot just replace the public exponent like you do after key generation (which happens in the constructor).您不能像密钥生成之后那样替换公共指数(这发生在构造函数中)。 By default a public exponent is likely set to 65537 (fifth prime of Fermat, F4) and you just set it to 0x65 .默认情况下,公共指数可能设置为 65537(费马的第五个素数,F4),您只需将其设置为0x65 If the public and private key do not match then the calculations will fail.如果公钥和私钥不匹配,则计算将失败。

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

相关问题 使用RSACryptoServiceProvider.Decrypt解密 - Decrypting using RSACryptoServiceProvider.Decrypt RSACryptoServiceProvider - 解密 - 参数不正确 - RSACryptoServiceProvider - Decrypt - The parameter is incorrect CryptographicException:未知错误“ 80007005”。 在.Net Compact Framework中调用RSACryptoServiceProvider.Decrypt()时 - CryptographicException: Unknown Error '80007005'. when calling RSACryptoServiceProvider.Decrypt() in .Net Compact Framework 如何解密由RSACryptoServiceProvider签名的数据 - How to decrypt data signed by RSACryptoServiceProvider 如何在Ubuntu中使用RSACryptoServiceProvider()解密c#中的加密数据? - How to decrypt an encrypted data in c# by using RSACryptoServiceProvider() in ubuntu? 通过RSACryptoServiceProvider加密/解密文件 - encrypt/decrypt file by RSACryptoServiceProvider RSACryptoServiceProvider,SSLStream(OpenSSL)-加密,解密 - RSACryptoServiceProvider, SSLStream(OpenSSL) - Encrypt, Decrypt RSACryptoServiceProvider使用公钥解密失败 - RSACryptoServiceProvider Decrypt failing using public key 如何使用 RSACryptoServiceProvider 解密加密文本? - how to decrypt an encrypted text using RSACryptoServiceProvider? 如何将 CspParameters 传递给另一个 RSACryptoServiceProvider 进行加密和解密 - How to pass CspParameters to another RSACryptoServiceProvider to encryption and Decrypt it
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM