Я пытаюсь зашифровать короткое сообщение с использованием алгоритма RSA в C # и расшифровать сообщение с помощью скрипта Python.
Я бы хотел использовать классы .NET на стороне C # и pycrypto на стороне Python. Мне удалось обеим сторонам использовать один и тот же ключ (который даже не был тривиальным, поскольку .NET напрямую не поддерживает стандартный формат PEM / DER). Шифрование / дешифрование работает с обеих сторон независимо друг от друга.
Я использую дополнение PKCS # 1 на стороне C # (для параметра fOAEP
для RSACryptoServiceProvider.Encrypt
установлено значение false
), поэтому я ожидаю, что после расшифровки блока в python я должен увидеть какой-то чистый текст (т.е. мое "сообщение" вместе с байтами заполнения)
Но я вижу только мусор: (.
Есть ли какие-либо предостережения / ловушки, о которых я не знаю ни с одной стороны? Я как бы вне идей ...
Thx
Martin
Пример кода
C # / Шифрование
Console.Write("Input string:");
var s = Console.ReadLine();
var b = Encoding.Default.GetBytes(s);
var encrypted = rsa.Encrypt(b, false);
using (var file = new FileStream(filename, FileMode.Create)) {
file.Write(encrypted, 0, encrypted.Length);
file.Flush();
file.Close();
}
Python / Расшифровка
f = open(filename, "rb")
msg = f.read()
f.close()
decrypted = rsa.decrypt(msg)
print "Decrypted message:"
print_hex(decrypted)
Для передачи ключей я использую ToXmlString()
метод RSACryptoServiceProvider
. Результирующий XML анализируется в python, и объект pycrypto -RSA инициализируется с помощью
r = Crypto.PublicKey.RSA.construct((modulus, exponent, d, p, q))
, где modulus
, exponent
, d
, p
и q
- соответствующие поля структуры .NET- RSAParameters
. (как я уже говорил, я могу зашифровать / расшифровать сообщение, используя этот ключ в python, также p*q
дает modulus
, поэтому я думаю, что импорт ключа работает правильно ...)