J'utilise un certificat généré par Makecert qui a la clé privée et publique. Le côté Java utilise cette clé publique pour chiffrer les données et le décrypte.
J'essaie de déchiffrer la chaîne codée cryptée de 64 bits de Java et de faire de mauvaises données. P>
Pour voir si tout est bon En fin de page, j'ai essayé de crypter avec la clé publique puis de déchiffrer avec le privé utilisant le même certificat. Mon code ressemble à ceci. P> même ici, je reçois l'erreur. Est-ce que je manque quelque chose? P> Le certificat est valide avec la clé publique et privée. P> p>
4 Réponses :
Le code suivant fonctionne bien pour moi:
RSACryptoServiceProvider privateKey = new RSACryptoServiceProvider(); privateKey.FromXmlString("<RSAKeyValue><Modulus>wL8s+C8SnnlaaqR+VsyijmxOJOARNa4o7ZNsqfy3+9J9Ol2JNSjjMfQWoUnFtClzJBlZhU5KtuazQe8ZKXTX9YvKoJdRhlsonZkC04qiTMdO/FZIH00GrCRxeQ7XDnQnvPB9Bdsvs//7zrY3f7eLIkpIyK9cQHU+5jjJd5IT0eE=</Modulus><Exponent>AQAB</Exponent><P>83xxN7jvpg5z16pxz2tIQIdqd/EfmikR9Q2TjG2tosWkUSvtyx0xHZ9EqdTUbSGZZ+jgrabzkafYc7Mplylwew==</P><Q>yqcnYSZEXHwJvRWi2V09PNEENTozQZywcFptUUGar9TciaQvoNv3lpnfzUKNBRdhzq4lImxkamajZlTWE5buUw==</Q><DP>37HqilkbwyHwB6mOGhPkM3S1ujAK6qTk3JB2iEOTjMGrru9+7maJYz+Z47Wm3ARMXgyzrpZ9m8nqsJFfmoL11Q==</DP><DQ>v285tv8kMs2FkZYfuP/oOkwkkneBNejjj68Md2bmzlThZDCyQV2pvB1tmgPVHUsiPNCrCaKlFRISJzfa5rR8Ow==</DQ><InverseQ>fgJE2TRe/SS+YqW0/I+FtHrdfbbao0/R3pHD4r4oceZQUemlBgZ7DxOAetebHKthlOdjGkmfWYB8EU4XoWggqw==</InverseQ><D>FMLCwjy3wbAKiCANp6XFAJgz1o7365NFv0k41BpvasViTa4TgFFWH2ROJ7M9g0lPqJy+YrhrHcY9mqV5TVjTheQp0JeckrgO2B39XngPMAMMdne3rWGpf0Pfbj3FLfchMk6XYDXSZzCS2CmSeRA4aBMb+4R3YurixyJLrnGRMH0=</D></RSAKeyValue>"); RSACryptoServiceProvider publicKey = new RSACryptoServiceProvider(); publicKey.FromXmlString("<RSAKeyValue><Modulus>wL8s+C8SnnlaaqR+VsyijmxOJOARNa4o7ZNsqfy3+9J9Ol2JNSjjMfQWoUnFtClzJBlZhU5KtuazQe8ZKXTX9YvKoJdRhlsonZkC04qiTMdO/FZIH00GrCRxeQ7XDnQnvPB9Bdsvs//7zrY3f7eLIkpIyK9cQHU+5jjJd5IT0eE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"); { string text = "foo"; byte[] encrypted = publicKey.Encrypt(Encoding.UTF8.GetBytes(text), false); byte[] decryptedBytes = privateKey.Decrypt(encrypted, false); }
Lorsque CERT Retourne le retour, il génère déjà la clé symétrique AES. Je n'utilise pas la mise en œuvre où nous devons faire d'abord créer la clé privée publique et générer des fournisseurs en fonction de cela. Cela utilise Makecert. Le code ci-dessus ne donne pas l'erreur, mais a 128 modulus de caractère ...
"Lorsque CERT renvoie, il génère déjà la clé symétrique AES." Je ne comprends pas vraiment ce que cela signifie. Où est générée la clé AES? Je ne peux pas le voir nulle part dans votre codesample.
Si vous faites le certificat avec MakeCert Tool. Il a la clé privée et publique dedans. Donc, vous pouvez aller au magasin obtenir la clé publique privée. Je n'ai pas mis le code pour obtenir la clé privée et publique
Mais je parlais d'utiliser une clé symétrique AES, que le clavier asymétrique RSA devrait crypter plutôt que de crypter le texte directement. Je me rends compte que l'outil Makecert génère les clés RSA.
J'ai enfin trouvé le problème. Je ne mettais pas la clé à MakeCert pour la définir en clé Crypto RSA. P>
J'ai eu le même problème avec un certificat auto-signé, le problème était que je produisais le certificat avec le commutateur Voici ma commande complète à MakeCert fonctionnant: P> -sky Signature code> au lieu de
-sky échange code> ( Vous utilisez la signature pour la signature et l'échange de cryptage / déchiffrement)
makecert -r -pe -a sha1 -n "CN=MyName" -ss my -sr CurrentUser -sky exchange
J'ai trébuché sur cette page lorsque j'essayais de trouver des exemples d'utilisation de Makcert avec des certificats X509 et de la RSA à l'aide de C # et, malheureusement, cela n'a fourni qu'une partie de la solution. Je mets tous les bits ensemble dans une entrée de blog que les gens pourraient être intéressés, et on peut trouver ici: http://nick-howard.blogspot.com /2011/05/MAKECERT-X509-Certificates-and-rsa.html P>
Quelle erreur? et sur quelle ligne?
Exception: mauvaises données .. Aucune exception interne supplémentaire lorsque l'octet [] déchiffrébytes = fournisseur.decrypt (crypté, faux); est appelé