RSA decryption is failing in Windows Server 2012 & Windows 10, but works like a charm in Windows 7. Have placed below the code that also contains the relevant keys used.
var rsa = new RSACryptoServiceProvider(1024);
const string privatekey = "<RSAKeyValue><Modulus>m38MvfdL8epfiYvgw6ylMB7zPAKSStQLklCQEOworQwJxw39bXdnm4717BUm5700vZCbG9GBgjwHUxmrFrFsSJxMIdYhokT/DuYOC9Nsf2fiX5Uq+WtBfbSneEr6yVk2VB1fgba6XxoK9O3CKzieR1XxPEofxGRjrXzMe8nIMNc=</Modulus><Exponent>AQAB</Exponent><P>33li38h5n1siKeu3LvsLF+JiytDAVLdRO6BkZ7btGcElTs/iir8ZIJFs2VvB5ELovk0iSBKZTNN/In4asEehaw==</P><Q>siDRbd2xQOyZnIOhfkjAt4QUNhskKRV56OkTvEawxloXZOssh0BjzuW8UVbiM3OuqgXUZm64eJyVghJacWXNRQ==</Q><DP>aafRWG5HGlGTCHDabcrhRsyQ2sTxedwl+uPtNJ/m35tS0T02JVUOQzieVvGr7Qi5U2fSgnLQqeMAo8UtRxTGuw==</DP><DQ>LB724Pi9k/BG6D6ufKI2of4kJ3a3kTmRlcBNtB/qX2cnTkb2I5YuYqwC5j7YDpiD1fdVsf2Q0ccvPSWgo1/s5Q==</DQ><InverseQ>YnPBkCyRyRnVWJPaJg507VdJpEPPeacdJ0wUJfiJgOfJPo01JLOWtgPWVqpW+pDTouv77qn7N1sIRo+IiyzsRA==</InverseQ><D>KEOLvxzr82Zm+qzXtJNd6sn43c8kpm+l12s5AsjD95soZPzAZLoIgAVStKD9hABASd3J7DghuuFkXCZHYQbsLLEeRY2TuuS/e6yyYV0+KNMRMrZAZ2DdWOdsfUmbQMiJNVTLmkwBgFLaFmcZ/DmPBMUYuJmFO9Tg6vEDCg45b5E=</D></RSAKeyValue>";
var dataByte = Convert.FromBase64String("YfFFh5cquMP8qMls+7e1WF23addkU9vLuK4W5U8R0zclbw1SJk+8QC8K17dgN5mXFKEifj669H7fAKfUphWDLqDSsodfFcGbElOC5J9ybf30Or1NPH9g2OTjIAaWluBjAYpg/qEtvJkvzwFpeqWoVOfNdwn51igCbPZKKi04tw==");
rsa.FromXmlString(privatekey);
//var dataNotWorkingByte = Convert.FromBase64String("YfFFh5cquMP8qMls+7e1WF23addkU9vLuK4W5U8R0zclbw1SJk+8QC8K17dgN5mXFKEifj669H7fAKfUphWDLqDSsodfFcGbElOC5J9ybf30Or1NPH9g2OTjIAaWluBjAYpg/qEtvJkvzwFpeqWoVOfNdwn51igCbPZKKi04tw==");
var dataWorkingByte = Convert.FromBase64String("I2S7t/BHFZo7JZFVUCHSSckHcWEASiZNjHmR5O1495y5RIej7d8PfnXjQYUrN1U352RAo373XSDuVhhFwS9XijI6lMJH/rlMjFIXOegcOrBJI406ZpF0dmbBc+Wq4rmBngT6fzrqvLLhijfRUq1m+K2dEfOkOuzRCsXKRKCOZBA=");
var descryptedString = Encoding.ASCII.GetString(decryptedByte);
The following exception is thrown
An unhandled exception of type 'System.Security.Cryptography.CryptographicException' occurred in mscorlib.dll Additional information: Bad Data.
EDIT Exception happens only when attempting to decrypt text with double padding (==). Have provided samples of working and not working texts
var dataNotWorkingByte = Convert.FromBase64String("YfFFh5cquMP8qMls+7e1WF23addkU9vLuK4W5U8R0zclbw1SJk+8QC8K17dgN5mXFKEifj669H7fAKfUphWDLqDSsodfFcGbElOC5J9ybf30Or1NPH9g2OTjIAaWluBjAYpg/qEtvJkvzwFpeqWoVOfNdwn51igCbPZKKi04tw==");
var dataWorkingByte = Convert.FromBase64String("I2S7t/BHFZo7JZFVUCHSSckHcWEASiZNjHmR5O1495y5RIej7d8PfnXjQYUrN1U352RAo373XSDuVhhFwS9XijI6lMJH/rlMjFIXOegcOrBJI406ZpF0dmbBc+Wq4rmBngT6fzrqvLLhijfRUq1m+K2dEfOkOuzRCsXKRKCOZBA=");
And the length of the data is well small and does not exceed 50 characters.
Thanks in advance for your time!!
Exception happens only when attempting to decrypt text with double padding (==). Have provided samples of working and not working texts
The Base64 padding changes the length of the byte[]
, but RSA decryption requires a byte[]
whose bit-length is the same as the key length.
The Base64 value
I2S7t/BHFZo7JZFVUCHSSckHcWEASiZNjHmR5O1495y5RIej7d8PfnXjQYUrN1U
352RAo373XSDuVhhFwS9XijI6lMJH/rlMjFIXOegcOrBJI406ZpF0dmbBc+Wq4r
mBngT6fzrqvLLhijfRUq1m+K2dEfOkOuzRCsXKRKCOZBA=
is equal to the hexadecimal value
2364BBB7F047159A3B2591555021D249C9077161004A264D8C7991E4ED78F79C
B94487A3EDDF0F7E75E341852B375537E76440A37EF75D20EE561845C12F578A
323A94C247FEB94C8C521739E81C3AB049238D3A6691747666C173E5AAE2B981
9E04FA7F3AEABCB2E18A37D152AD66F8AD9D11F3A43AECD10AC5CA44A08E6410
Which is 128 bytes, or 1024-bit, so it isn't an outright wrong value for RSA decryption.
On the other hand, the Base64 value
YfFFh5cquMP8qMls+7e1WF23addkU9vLuK4W5U8R0zclbw1SJk+8QC8K17dgN5m
XFKEifj669H7fAKfUphWDLqDSsodfFcGbElOC5J9ybf30Or1NPH9g2OTjIAaWlu
BjAYpg/qEtvJkvzwFpeqWoVOfNdwn51igCbPZKKi04tw==
is equal to the hexadecimal value
61F14587972AB8C3FCA8C96CFBB7B5585DB769D76453DBCBB8AE16E54F11D337
256F0D52264FBC402F0AD7B76037999714A1227E3EBAF47EDF00A7D4A615832E
A0D2B2875F15C19B125382E49F726DFDF43ABD4D3C7F60D8E4E320069696E063
018A60FEA12DBC992FCF01697AA5A854E7CD7709F9D628026CF64A2A2D38B7
Which is only 127 bytes. Therefore it is not a valid blob to decrypt under a 1024-bit key.
The real error lies in whatever is producing that value. RSA encryption always produces an answer of the key size:
RFC 3447, section 7 shows both OAEP and PKCS1-v1_5 as ending in I2OSP (c, k)
, where "k denotes the length in octets of the modulus n".
I2OSP(x, xLen) has the cautionary note: "note that one or more leading digits will be zero if x is less than 256^(xLen-1)". My only speculation (aside from corrupted data) is that you somewhere encountered a system that removed the leading zeros as being irrelevant.