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