RSA: Comment générer une clé privée en Java et l’utiliser en C #?

J’aimerais générer une clé privée en java, l’enregistrer en tant que chaîne codée en base 64 dans un fichier, puis chiffrer une phrase en C # à l’aide de ce fichier enregistré. Je sais générer des clés en Java et l’encoder avec 64 bases. Ma question est la suivante: comment utiliser cette clé en C #? Ceci est un prototype de code Java pour enregistrer une clé privée dans un fichier texte:

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())); 

Je voudrais implémenter la fonction suivante en C # mais je ne trouve pas comment créer RSAParameters ou RSACryptoServiceProvider à partir d’une clé privée

  public static ssortingng DecryptData(ssortingng privateKey64Base, ssortingng data64Base) { // create using privateKey64Base // create RSACryptoServiceProvider rsa using RSAParameters above // byte[] encryptedData = rsa.Encrypt(Convert.FromBase64Ssortingng(data64Base); } 

Cette page contient des conseils adaptés à votre situation, car vous écrivez des clés PKCS # 8 (avec keyPair.getPrivate (). GetEncoded ())

En utilisant cette approche, vous utiliseriez l’utilitaire du côté Java pour obtenir la clé privée au format PRIVATEKEYBLOB.

Vous pouvez également utiliser BouncyCastle C # qui peut lire la clé (voir par exemple Org.BouncyCastle.Security.PrivateKeyFactory.CreateKey – vous devez d’abord décoder Base64 bien sûr).

Cette question précédente a la réponse pour la conversion de l’object clé BC résultant en RSACryptoServiceProvider: BouncyCastle RSAPrivateKey en .NET RSAPrivateKey

Troisièmement, vous voudrez peut-être utiliser un fichier de clés, par exemple PKCS # 12, qui constitue un moyen plus standard (et sécurisé) de stockage des clés privées.

Voici un exemple de code pour qui a demandé:

 AsymmesortingcKeyParameter keyPair = Org.BouncyCastle.Security.PrivateKeyFactory.CreateKey(Convert.FromBase64Ssortingng("PKCS#8Key")); var decryptEngine = new Pkcs1Encoding(new RsaEngine()); decryptEngine.Init(false, keyPair); var decrypted = Encoding.UTF8.GetSsortingng(decryptEngine.ProcessBlock(bytesToDecrypt, 0, bytesToDecrypt.Length)); 

crédit à @ peter-dettman