就在最近,我在密钥存储方面遇到了问题。我知道已经有很多关于这个问题的问题了。我已经阅读了所有这些内容并疯狂地用谷歌搜索。
Error:
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
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)
Eclipse
Version: 3.8.0
Build id: I20120502-2000
最新的 ADT 插件
最新安卓SDK
这是我所知道的:
- 我没有丢失密码,也从未更改过。
- 我无法找回密码(我知道通行证)。
- 在不发布全新应用程序的情况下,我无法使用不同的密钥对现有应用程序进行签名(因此我无法发布任何更新)。
这是我所做的:
- 我已经多次卸载并重新安装 Eclipse。
- 我已经卸载并重新安装了android ADT插件。
- 我已经多次删除并重新下载最新的 Android SDK。
- 我已经卸载并重新安装了JDK7。
- 我尝试过使用我的密钥库的备份。
- 我已经使用“md5sum KEYSTORE”检查了 MD5 校验和,并与备份进行了比较(相同的 MD5 输出 - 未篡改)。
- 我尝试过暴力破解密钥库(我已检索到我知道的密码)。
- 我创建了一个测试密钥(使用当前设置)并测试了密码,它似乎工作正常(所以有些东西发生了变化)。
- 我尝试手动导出 android .apk,然后尝试对其进行签名(在 Eclipse 之外)。
以下是导出签名应用程序的方法:
-
通过日食:使用“文件”>“导出”>“导出 Android 应用程序”导出。
-
JDK7之前:jarsigner -verbose -keystore 密钥库文件别名。
-
使用 JDK7:jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore 密钥库文件别名。
还有什么需要弄清楚或尝试的?
一些参考资料/URL 说要删除“trusted.certs”文件?
尝试删除“debug.keystore”?
更新 Eclipse 或任何 Android 开发工具会影响我的密钥库吗?
将 Java 从 jdk6 更新到 jdk7 会产生任何问题吗?
这是否会扰乱或改变 jarsigner 的工作方式?
用户建议:
- 尝试使用 JDK6,但我最近能够导出应用程序。
在我的 local.properties 中检查了 key.store.password 或 key.alias.password
在 Eclipse 中取消自动构建并清理项目
尝试删除工作区中的 .metadata 文件夹并清除所有临时文件夹。
Summary
- 密钥库没有改变,
- 我有密钥库的密码,
- I have successfully exported an application recently using:
- Eclipse 3.8(和 Eclipse 4.0+),
- 最新的Java 7,
- 最新的 ADT 插件。
- 我上次成功导出和构建是在几周前,使用 Eclipse 3.8、最新的 Android 工具和 Java 7 使用相同的密码。
更新(2014 年 6 月 29 日)
- 我用过了:keytool -list -keystore KEYSTORE成功证明并展示我的 4 个钥匙中的 3 个有效。
- 我暴力破解了最后一个密钥并从密钥库获取了密码(我已经知道的通行证),但是当我输入签名时密码不起作用。我用过了:java-jarAndroidKeystoreBrute_v1.02.jar-m 3 -k 密钥库 -d 单词列表.
- 奇怪的是,有时当我很快在 eclipse 中输入密码时,我的别名就会出现,并且我可以成功导出我的应用程序。 (我知道这很疯狂)。
- 更新了 Java 版本。
如果我很快输入密码,有时它会起作用。
似乎第一次打开 Eclipse 并输入密码就可以使用密钥库。
显然,如果一切都失败了,我将不得不创建一个新的密钥存储。我真的很想解决这个问题,我只是不知道除了使用新密钥重新发布之外现在还能做什么。
如果密钥无法正常恢复,我可能会在 Github 上开源。
解决方案(2014 年 6 月 29 日):
特别感谢用户 Erhannis!
这是我所做的:
该命令每次都会出错:
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
既然您告诉我我们可以从 Java Keystore(.jks) 中提取私钥,我就深入研究并最终使用了该命令的变体。我按照你发布的链接进行操作here https://security.stackexchange.com/a/3795 and here http://www.tbs-certificates.co.uk/FAQ/en/626.html:
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -deststoretype pkcs12
提取私钥并存储为 PKCS12 后,我认为提取了我的私钥并将其放回到全新的 Java 密钥库中:
keytool -importkeystore -srckeystore new.keystore -srcstoretype pkcs12 -destkeystore final.keystore -deststoretype jks
参考:
http://developer.android.com/tools/publishing/app-signing.html#signapp http://developer.android.com/tools/publishing/app-signing.html#signapp
http://code.google.com/p/android-keystore-password-recover/ http://code.google.com/p/android-keystore-password-recover/
我读过的 StackOverflow URL 列表:
如何处理 Android 中丢失的 KeyStore 密码? https://stackoverflow.com/questions/6089813/please-advice-needed-lost-keystore-password
无效密钥库问题? https://stackoverflow.com/questions/6035970/invalid-keystore-problem
Android:我丢失了 Android 密钥存储,我该怎么办? https://stackoverflow.com/questions/4459719/android-i-lost-my-android-key-store-what-should-i-do
我丢失了 .keystore 文件? https://stackoverflow.com/questions/4322367/i-lost-my-keystore-file
忘记了密钥库密码,正在考虑暴力检测。它会损坏密钥库吗? https://stackoverflow.com/questions/6149530/forgot-keystore-password-thinking-of-brute-force-detection-will-it-corrupt-the
我丢失了 android 密钥库文件的密码 https://stackoverflow.com/questions/8877354/i-have-lost-the-password-for-android-keystore-file
在 Eclipse 中运行我的签名发布密钥库时出现问题 https://stackoverflow.com/questions/4280507/problem-running-my-signed-release-keystore-in-eclipse
Android - 忘记密钥库密码。我可以解密密钥库文件吗? https://stackoverflow.com/questions/8894987/android-forgot-keystore-password-can-i-decrypt-keystore-file
Android发布密钥库问题:“密钥库被篡改,或密码不正确” https://stackoverflow.com/questions/9309975/android-release-keystore-issue-keystore-was-tampered-with-or-password-was-inc