Le Chiffrement RSA: Différence entre Java et Android
Je suis à l'aide de RSA pour crypter le nom d'utilisateur et mot de passe sur Android et déchiffrer sur le serveur (tomcat 6, java 1.6).
Android De Chiffrement:
PublicKey pubKey = readPublicKeyFromFile(mod, ex);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(data);
return cipherData;
Java Tomcat Décryptage:
PrivateKey pubKey = readPrivateKeyFromFile(mod, ex);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, pubKey);
byte[] cipherData = cipher.doFinal(data);
return cipherData;
Si j'utilise le android partie à l'EXTÉRIEUR android (Juste dans une méthode main), il fonctionne très bien. Mais pas à l'intérieur de mon android (Émulateur). Sur de de côté de serveur j'obtiens l'erreur suivante:
javax.crypto.BadPaddingException: Blocktype mismatch: 0
at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:311)
at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:255)
at com.sun.crypto.provider.RSACipher.a(DashoA13*..)
at com.sun.crypto.provider.RSACipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
Je garde le mod et ex BigIntegers constantes, donc je ne pas les écrire dans un fichier.
Je sais qu'il y a différence entre java1.6 et java 1.5 chiffrement, de sorte que les deux sont compilé avec la version 1.6 de java.
Certaines informations de débogage:
Au cours de débogage android, et je peux voir que pubKey contient le module et l'exposant en hexadécimal. Et si je debug dans une méthode main (encore une fois le même code), je peux voir que pubKey contient le module et l'exposant décimal.
Ce que je fais mal?
Grâce
- Double Possible: stackoverflow.com/questions/4926126/...
- Avez-vous vraiment vous appeler clé privée
pubKey
? Est-ce vraiment le code ou ne tapez simplement sur la question de la mémoire? - Attention pour les nouveaux protocoles, d'essayer et d'utiliser padding oaep à la place. PKCS#1 est vulnérable à l'padding oracle attaques.
Vous devez vous connecter pour publier un commentaire.
Im faire RSA Chiffrer en Android 2.2+ et décrypter sur un tomcat 6 la version 1.6 de java server.
J'ai été faire exactement ce problème, la lecture de tous sur la place et dans la partie grâce à @Femi 's réponse je suis tombé sur ce dont j'avais besoin.
La solution a été d'utiliser l'algorithme suivant spécification de l'algorithme de Chiffrement:
Cela fonctionne en faisant un chiffrement à la fois Android et les smartphones BlackBerry. Je sais que sa fait quatre mois depuis que la question a été posée, mais juste au cas où quelqu'un d'autre passe par ce problème.
Je vous suggère d'utiliser spécifique de chiffre d'initialisation: par exemple,
va travailler sur les deux. L'exception que vous obtenez (BadPaddingException) se produit parce que le défaut de chiffre d'initialisation rembourrage semble être différente entre le bureau de la JVM et le Android JVM.
Tout d'abord, il semble que vous êtes l'initialisation de deux algorithmes de chiffrement avec la clé publique. Le chiffrement utilise une clé publique, le déchiffrement utilisé la clé privée. J'espère que c'est juste une faute de frappe bien.
J'ai eu beaucoup de mal avec le cryptage RSA, ainsi, beaucoup d'essais et d'erreurs. Je vous suggère d'essayer un autre fournisseur. J'ai réussi à mettre en œuvre du RSA à l'aide de BouncyCastle.
Bien, j'ai généré mon propre paire de clés, étant donné que c'était un chiffrement de session.