Задача: сервер передает закрытый ключ и шифротекст. Надо его расшифровать.
Вижу в .NET есть класс RSACryptoServiceProvider.
НО! Эта собака требует наличия открытого ключа. Т.е. экспоненты. Почитал про RSA, попробовал вместо экспоненты подсунуть секретную экспоненту, пишет плохие данные...
Может, кто-нибудь подскажет библиотеку RSA или как работать с .NET, чтобы решилась эта задача?
П.с. передавать открытый ключ вместе с закрытым не вариант - на той стороне должны уметь расшифровывать, но не уметь зашифровывать.
П.п.с тестовый кусок кода:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
String str = rsa.ToXmlString(true);
MemoryStream config = new MemoryStream();
BinaryFormatter serial = new BinaryFormatter();
serial.Serialize(config, str.ToArray());
byte[] serialObj = config.ToArray();
string RSAKey = "<RSAKeyValue><Modulus>rZfC4KXnycP+MyK7Z94VEurnIkU9+3RoTo8gv1CfNDwdIEGnk9oTWUmScy7cscTYXOyDAGl7L+qFq+0gkf6Y4ssNEbyYIxSpfGuzIHLUYbmm1EWPGSOsADmNGZPB0zK9MIP3+q9Jm766lrlGMs3EwvIm3eaeN2RzqSbQGaE85LM=</Modulus><Exponent>AQAB</Exponent><P>vqjQLNlT+FpCpoCU97DtIJlxg8Zg+8tqmo70nFPw5AWIP4eTDaAVheJ/iCQe9JfT8oId4kJ7vVy1ZBPhZtNQew==</P><Q>6RWjN2gz7Sdjwdk71kJ7JVqpeAlqm3hR1o9DXvHluEWsWPaqqt/2a3G0EnX6q+ToBAO37mjLtqvWFF8gf62zKQ==</Q><DP>JCNPQhD3b418MJ8SnVg1ugYblASYAWHvFNif2Lm4YSADUTdbUivTqIrj7WQbUfUtQTwUefxsA9p8rzltcdX/3Q==</DP><DQ>VyVO4+1i1L1Qb+6/j4lFr56pFAc5Q62Fs5nWz43TnMT3/j8jakXYRS267NgNg+1Ozglx4IJv//lZTj6O0Q3pmQ==</DQ><InverseQ>cTBRRTeFvCuQqUk41gqbZaYBvkvSxOsOYC/2947c4Rrew6Gzokxo2hStOajpEZq+ZNd9qr8Cqkce6WQGqGMBpQ==</InverseQ><D>G1z5PIUaWN0apD/cz54br0w029uTTiBG0t9P16hjOA4jvzJqMm2lMCVfPuXLpv/y5Q7pBXcbEm4C3Rt3T1wVCCQTH/WnzTVtL5h+iwXf6qJYsUlVLOmtg8XD6K6rGKE0XXP8UBOMqSzE72nl0eAn4uXmN8qR7U117QtPpE5skCk=</D></RSAKeyValue>";
string RSAEncrKey = "<RSAKeyValue><Modulus>rZfC4KXnycP+MyK7Z94VEurnIkU9+3RoTo8gv1CfNDwdIEGnk9oTWUmScy7cscTYXOyDAGl7L+qFq+0gkf6Y4ssNEbyYIxSpfGuzIHLUYbmm1EWPGSOsADmNGZPB0zK9MIP3+q9Jm766lrlGMs3EwvIm3eaeN2RzqSbQGaE85LM=</Modulus><Exponent>G1z5PIUaWN0apD/cz54br0w029uTTiBG0t9P16hjOA4jvzJqMm2lMCVfPuXLpv/y5Q7pBXcbEm4C3Rt3T1wVCCQTH/WnzTVtL5h+iwXf6qJYsUlVLOmtg8XD6K6rGKE0XXP8UBOMqSzE72nl0eAn4uXmN8qR7U117QtPpE5skCk=</Exponent></RSAKeyValue>";
string RSADecrKey = "<RSAKeyValue><Modulus>rZfC4KXnycP+MyK7Z94VEurnIkU9+3RoTo8gv1CfNDwdIEGnk9oTWUmScy7cscTYXOyDAGl7L+qFq+0gkf6Y4ssNEbyYIxSpfGuzIHLUYbmm1EWPGSOsADmNGZPB0zK9MIP3+q9Jm766lrlGMs3EwvIm3eaeN2RzqSbQGaE85LM=</Modulus><Exponent>AQAB</Exponent><P>vqjQLNlT+FpCpoCU97DtIJlxg8Zg+8tqmo70nFPw5AWIP4eTDaAVheJ/iCQe9JfT8oId4kJ7vVy1ZBPhZtNQew==</P><Q>6RWjN2gz7Sdjwdk71kJ7JVqpeAlqm3hR1o9DXvHluEWsWPaqqt/2a3G0EnX6q+ToBAO37mjLtqvWFF8gf62zKQ==</Q><DP>JCNPQhD3b418MJ8SnVg1ugYblASYAWHvFNif2Lm4YSADUTdbUivTqIrj7WQbUfUtQTwUefxsA9p8rzltcdX/3Q==</DP><DQ>VyVO4+1i1L1Qb+6/j4lFr56pFAc5Q62Fs5nWz43TnMT3/j8jakXYRS267NgNg+1Ozglx4IJv//lZTj6O0Q3pmQ==</DQ><InverseQ>cTBRRTeFvCuQqUk41gqbZaYBvkvSxOsOYC/2947c4Rrew6Gzokxo2hStOajpEZq+ZNd9qr8Cqkce6WQGqGMBpQ==</InverseQ><D>G1z5PIUaWN0apD/cz54br0w029uTTiBG0t9P16hjOA4jvzJqMm2lMCVfPuXLpv/y5Q7pBXcbEm4C3Rt3T1wVCCQTH/WnzTVtL5h+iwXf6qJYsUlVLOmtg8XD6K6rGKE0XXP8UBOMqSzE72nl0eAn4uXmN8qR7U117QtPpE5skCk=</D></RSAKeyValue>";
RSACryptoServiceProvider rsaEncr = new RSACryptoServiceProvider();
rsaEncr.FromXmlString(RSAEncrKey);
byte[] fst = new byte[60];
for (int i = 0; i < fst.Length; i++)
fst[i] = serialObj[i];
byte[] encr = rsa.Encrypt(fst, false);
rsa.FromXmlString(RSADecrKey);
byte[] decr = rsa.Encrypt(encr, false);