Я хочу реализовать сценарий, в котором две конечные точки могут надежно связываться друг с другом с использованием шифрования с открытым/закрытым ключом. Сценарий следующий:Реализовать безопасную связь с использованием RSA-шифрования в C#
For A, чтобы отправить сообщение для B:
шифрует сообщение с помощью секретного ключа в.
Зашифрует сообщение с использованием открытого ключа B.
A отправляет сообщение.
B получает сообщение.
B расшифровывает сообщение с использованием открытого ключа A.
B расшифровывает сообщение, используя закрытый ключ B.
B читает сообщение.
Вот что я имею в C# с использованием RSA шифрования:
// Alice wants to send a message to Bob:
String plainText = "Hello, World!";
Byte[] plainData = Encoding.Default.GetBytes(plainText);
Byte[] cipherData = null;
RSACryptoServiceProvider alice = new RSACryptoServiceProvider();
RSACryptoServiceProvider bob = new RSACryptoServiceProvider();
var alicePrivateKey = alice.ExportParameters(true);
var alicePublicKey = alice.ExportParameters(false);
var bobPrivateKey = bob.ExportParameters(true);
var bobPublicKey = bob.ExportParameters(false);
RSACryptoServiceProvider messenger = new RSACryptoServiceProvider();
messenger.ImportParameters(alicePrivateKey);
cipherData = messenger.Encrypt(plainData, true);
messenger.ImportParameters(bobPublicKey);
cipherData = messenger.Encrypt(cipherData, true);
messenger.ImportParameters(alicePublicKey);
cipherData = messenger.Decrypt(cipherData, true);
messenger.ImportParameters(bobPrivateKey);
cipherData = messenger.Decrypt(cipherData, true);
String result = Encoding.Default.GetString(alice.Decrypt(cipherData, true));
Очевидно, что-то не так со следующими строками:
messenger.ImportParameters(bobPublicKey);
cipherData = messenger.Encrypt(cipherData, true);
Который бросает System.Security.Cryptography .CryptographyException с сообщением {"Плохая длина"}.
Как я вижу, он не может шифровать данные, используя только общедоступную часть ключа bob.
Может ли кто-нибудь пролить свет на то, как правильно выполнить то, что я хочу сделать в C#?
Это означает, что я не могу использовать RSA для реализации сценария, который я хочу реализовать. Можете ли вы указать на хороший пример того, как реализовать данный сценарий в C#? –
http://www.obviex.com/samples/Encryption.aspx. Вы также можете использовать SSL. – Manoj
Этот пример предназначен для Symmetric Key Encryption. Я хочу реализовать шифрование Public/Private key. –