Tout récemment, j'ai eu un problème avec un magasin de clés. Je sais qu'il y a déjà beaucoup de questions sur ce problème. Je les ai tous lus et googlé furieusement.
keytool error: Java.io.IOException: Keystore was tampered with, or password was incorrect
Java.io.IOException: Keystore was tampered with, or password was incorrect
at Sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.Java:772)
at Sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.Java:55)
at Java.security.KeyStore.load(KeyStore.Java:1214)
at Sun.security.tools.KeyTool.doCommands(KeyTool.Java:885)
at Sun.security.tools.KeyTool.run(KeyTool.Java:340)
at Sun.security.tools.KeyTool.main(KeyTool.Java:333)
Caused by: Java.security.UnrecoverableKeyException: Password verification failed
at Sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.Java:770)
... 5 more
Java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
Version: 3.8.0
Build id: I20120502-2000
Si je tape le mot de passe très rapidement, cela fonctionne parfois.
Il semble que l'ouverture d'Eclipse et la saisie du mot de passe la première fois me permettent d'utiliser le magasin de clés.
Évidemment, si tout le reste échoue, je devrai créer un nouveau magasin de clés. Je voudrais vraiment que cela soit résolu, je ne suis pas sûr de savoir quoi faire maintenant à part republier avec une nouvelle clé.
Si la clé ne peut pas être récupérée correctement, il est possible que je l’ouvre au source sur Github.
Un merci spécial à l'utilisateur Erhannis!
Voici ce que j'ai fait:
La commande me tromperait à chaque fois:
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
Comme vous m'aviez dit que nous pouvions extraire des clés privées du keystore Java (.jks), j'ai creusé plus profondément et fini par utiliser une variante de la commande. J'ai suivi les liens que tu as postés ici et ici :
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -deststoretype pkcs12
Après avoir extrait la clé privée et l'avoir stockée sous le nom de PKCS12, je pense qu'elle a extrait ma clé privée et l'a réinsérée dans un tout nouveau keystore Java:
keytool -importkeystore -srckeystore new.keystore -srcstoretype pkcs12 -destkeystore final.keystore -deststoretype jks
http://developer.Android.com/tools/publishing/app-signing.html#signapp
http://code.google.com/p/Android-keystore-password-recover/
Comment gérer un mot de passe KeyStore perdu dans Android?
Problème de fichier de clés non valide?
Android: j'ai perdu mon magasin de clés Android, que dois-je faire?
J'ai perdu mon fichier .keystore?
J'ai perdu le mot de passe pour le fichier Keystore Android
Problème d'utilisation de mon magasin de clés signé et publié dans Eclipse
Android - Mot de passe oublié Puis-je déchiffrer le fichier de magasin de clés?
J'ai peut-être eu le même problème. Je n'ai jamais compris pourquoi il échouait (même si je me demandais si le mot de passe du magasin de clés était inférieur à 6 chiffres), mais j'ai pu copier ma clé dans un nouveau magasin de clés, que j'ai ensuite renommé pour remplacer l'ancien. et cela a mystérieusement fonctionné après cela (en utilisant les nouveaux mots de passe). J'avais besoin du mot de passe clé, au fait. Travailler hors https://security.stackexchange.com/a/3795 , j'ai fait ce qui suit:
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
Après avoir vérifié que le nouveau fonctionnait, je l’ai simplement copié sur l’ancien. J'espère que ça marche pour toi; bonne chance.
Essayez de supprimer le dossier .metadata de votre espace de travail et d'effacer tous les dossiers temporaires. Si votre fichier de clés n'est pas endommagé et que vous avez essayé de réinstaller correctement Eclipse, ADT, Android SDK et Java SDK, je ne vois pas d'autres causes possibles de ce problème étrange, à l'exception des fichiers cache .metadata et/ou d'une corruption temporaire.
Une autre suggestion
Essayez d’utiliser Portecle un utilitaire de gestion et d’examen des magasins de clés, des clés, des certificats, des demandes de certificat, des listes de révocation de certificats, etc.
J'ai eu le même problème et j'ai essayé tout ce qui est suggéré dans ce fil, mais rien n'a pu enregistrer mon mot de passe alias. Le fait est que j'étais absolument sûr du mot de passe, car j'avais déjà mis à jour l'application quatre fois. Je recevais le "le magasin de clés a été falsifié ou le mot de passe était incorrect".
Il semble qu’à la création du fichier de clés à l’aide d’Eclipse, un espace ait été ajouté devant le mot de passe!
Ce bogue méchant a apparemment été corrigé dans une version ultérieure, ce qui m'a empêché de signer mon application avec le mot de passe que je pensais être le bon.
Sur la base de ce lien SO: Ant ne parvient pas à créer un apk signé après la mise à jour vers Android v20 Je vous suggère de essayez d'ajouter un caractère d'espacement avant ou après votre mot de passe.
Je vais suggérer quelques autres essais et essais.
Ayez de la patience pour les appliquer,
J'espère que cela vous aidera.
Enregistrez-vous des valeurs telles que key.store.password ou key.alias.password dans votre fichier local.properties? Est-ce que l'un ou l'autre est incorrect?
Je suis curieux de savoir si un bogue survient pour les clés créées avec JDK6 et vérifiées dans JDK7. Cela expliquerait pourquoi les nouvelles clés que vous avez créées pour les tests fonctionnent, mais l'ancienne ne fonctionne pas. Essayez de rétrograder en JDK6 et voyez si cela résout le problème. D'autres personnes ont eu des problèmes de contrôle dans JDK7 qui ont disparu lors de la mise à niveau 6. Si cela fonctionne, créez un rapport de bogue et demandez un correctif pour pouvoir effectuer une mise à niveau vers Java 7 en toute sécurité.
J'ai également combattu ce problème récemment et j'ai essayé toutes les suggestions énumérées ici et ailleurs. Enfin identifié une erreur stupide qui causait cette erreur de ma part - je voulais partager ceci ici au cas où cela pourrait aider l’un de vous.
Ce sera probablement le cas si, comme moi, plusieurs versions de Java sont installées sur votre machine et que vous avez mis à niveau JRE/JDK entre le moment où vous avez initialement créé le magasin de clés et le moment où vous essayez de signer l'APK.
Pour une raison quelconque, nos instructions de compilation référençaient le chemin complet Java comme ceci:
C:\Progra ~ 1\Java\jdk1.6.0_45\bin\jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve
L'une des suggestions ci-dessus m'a fait penser qu'il ne s'agissait peut-être pas d'un problème de mot de passe, ni d'incompatibilités de version. J'ai donc lancé la commande ci-dessous:
keytool -list -keystore cre80ve.keystore
En utilisant le mot de passe que je savais être correct, et voilà, cela a confirmé que c'était le bon mot de passe.
J'ai ensuite supprimé la référence explicite dans le chemin d'accès à la version plus ancienne de Java. Cela a permis de récupérer automatiquement la dernière version de Java (jdk1.8.0_31 dans mon cas):
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve
Et tout a commencé à bien fonctionner!
Bottomline: il ne s'agit peut-être pas d'un problème de mot de passe, mais de versions différentes de Java ou du SDK Android à l'origine du problème, alors n'oubliez pas de vérifier cela.
Et une fois que cela fonctionne, n'oubliez pas de sauvegarder votre magasin de clés et votre mot de passe dans un endroit sûr :-)
Je viens d'avoir ce problème - tout à coup, Android Studio a oublié mes mots de passe et n'utilise plus ceux que j'avais dans le fichier Gradle. J'ai le même fichier de clé et les mêmes mots de passe dans le même projet depuis 6 ans!
Je les ai donc entrées manuellement - mais la vérification échouait maintes fois. J'ai essayé des choses telles que l'invalidation des caches, le redémarrage d'Android Studio et la restauration d'une sauvegarde du magasin de clés, mais rien n'y fait.
Enfin, en désespoir de cause, j'ai essayé de changer le mot de passe du magasin de clés et le mot de passe de la clé. Ouais, ça a marché! Il s'avère que j'avais changé les mots de passe lorsque je les avais saisis dans le fichier de compilation de Gradle il y a quelques années et, pour une raison quelconque, je ne l'ai jamais remarqué.
Conclusion: ne jamais être sûr à 100% que vous le faites bien.
Mon alias de clé a cessé de fonctionner soudainement. (Ok, après quelques mises à jour d'Android Studio et Java).
J'ai essayé toutes les solutions de ce fil ainsi que d'autres. Dans mon cas, la solution était surprenante ... J'ai le magasin de clés avec peu de pseudonymes. Aucun ne fonctionnait sauf un, dont le mot de passe était identique à keystore. Mais malheureusement, ce n'était pas celui dont j'avais besoin. Cela m'a fait penser sans aucune logique impliquée . J'ai copié un alias unique vers un nouveau magasin de clés avec
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -srcalias importantalias
Et puis j'ai changé le mot de passe alias pour qu'il soit identique au mot de passe du magasin de clés avec:
keytool -keypasswd -keystore new.keystore -alias importantalias
Finalement, j'ai pu signer mon apk… .. Cela ressemble à un bêtise qui peut perdre une journée de développement.