RSA: Как генерировать закрытый ключ в Java и использовать его в C#?

Я хотел бы генерировать закрытый ключ в Java, сохранить его, поскольку 64 основы закодировали строку в некотором файле, и затем зашифруйте некоторую фразу в C# с помощью этого сохраненного файла. Я знаю, чтобы генерировать ключи в Java и закодировать его 64 основами. Мой вопрос состоит в том, как я использую этот ключ в C#? Это - прототип кода Java для сохранения закрытого ключа в текстовый файл:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
RSAKeyGenParameterSpec spec = new RSAKeyGenParameterSpec(1024, RSAKeyGenParameterSpec.F4);
keyGen.initialize(spec);
KeyPair keyPair = keyGen.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
writeToFile("privateKey", Base64.encode(keyPair.getPrivate().getEncoded()));

Я хотел бы реализовать следующую функцию в C#, но не могу найти, как создать RSAParameters или RSACryptoServiceProvider от закрытого ключа

 public static string DecryptData(string privateKey64Base, string data64Base)
 {
   // create using privateKey64Base
   // create RSACryptoServiceProvider rsa using RSAParameters above
   // byte[] encryptedData = rsa.Encrypt(Convert.FromBase64String(data64Base);
 }
8
задан Moisei 2 February 2010 в 15:19
поделиться

1 ответ

Эта страница содержит советы для вашей ситуации, так как вы выписываете ключи PKCS#8 (с помощью keyPair.getPrivate().getEncoded())

Используя этот подход, вы бы использовали утилиту на Java-стороне, чтобы получить приватный ключ в формате PRIVATEKEYBLOB в первую очередь.

В качестве альтернативы можно использовать BouncyCastle C#, в котором можно прочитать ключ (см., например, Org.BouncyCastle.Security.PrivateKeyFactory.CreateKey - сначала, конечно, необходимо расшифровать Base64).

В этом предыдущем вопросе есть ответ на преобразование из результирующего объекта ключа BC в RSACryptoServiceProvider: BouncyCastle RSAPrivateKey в .NET RSAPrivateKey

В-третьих, можно рассмотреть использование клавиатуры, например, PKCS#12, которая является более стандартным (и безопасным) способом хранения приватных ключей.

5
ответ дан 5 December 2019 в 23:15
поделиться