就在最近,我曾与一个密钥存储的问题。 我知道有很多关于这个问题已经问题。 我已阅读所有这些,拼命用谷歌搜索。
错误:
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)
日食
Version: 3.8.0
Build id: I20120502-2000
最新的ADT插件
最新的Android SDK
这是我所知道的:
- 我没输密码也从来没有改变。
- 我不能取回密码(我知道通)。
- 不释放一个全新的应用程序(所以我不能发布任何更新),我无法登录使用不同的密钥现有的应用程序。
这是我做了什么:
- 我已经卸载并重新安装了Eclipse很多次。
- 我已经卸载和重新安装Android的ADT插件。
- 我已删除并重新下载最新的Android SDK中多次。
- 我已经卸载和重新安装JDK7。
- 我一直在使用我的密钥库的备份尝试。
- 我一直在使用“的md5sum密钥库”检查MD5校验,并与备份(相同的MD5输出 - 没有被篡改)。
- 我曾尝试暴力破解的密钥存储(我取回我知道密码)。
- 我创建了一个测试键(与目前的设置),并测试了密码,它似乎工作得很好(所以事情已经改变)。
- 我曾尝试手动导出的android apk文件,然后试图签下它(Eclipse之外)。
这是我如何导出签名的应用程序:
- 通过Eclipse中:导出使用文件>导出>导出Android应用程序的。
- JDK7前:-verbose的jarsigner -keystore密钥库文件的别名。
- 随着JDK7:-verbose的jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore密钥库文件的别名。
还有什么搞清楚,或者尝试?
-
一些引用/ URL的说删除“trusted.certs”文件? -
请尝试删除“debug.keystore”? -
将更新Eclipse或任何的Android开发工具会影响我的密钥库? -
将从JDK6更新Java来JDK7产生任何问题? -
这会不会与混乱或改变的jarsigner反正是如何工作的?
用户的建议:
- 尝试使用JDK6,但我能最近导出应用程序。
-
经过key.store.password或在我local.properties key.alias.password -
在Eclipse将自动取消选中的构建和清理项目 -
尝试删除.metadata文件夹中的工作区,并清除所有的临时文件夹。
摘要
- 密钥库并没有改变,
- 我有密码的密钥库,
- 我已经成功出口申请最近开始使用:
- Eclipse的3.8(和Eclipse 4.0+)
- 最新的Java 7,
- 最新的ADT插件。
- 我最后成功的出口和建设是在几个星期前使用Eclipse 3.8,最新的Android工具和Java 7相同的密码。
更新(14年6月29日)
- 我用命令:keytool -list -keystore密钥库成功地证明和表明,3挡我的4个按键的工作。
- 我bruteforced最后的关键,并从密钥库(我已经知道该通)获得的密码,但是当我进行签名输入密码不起作用。 我已经使用:Java的罐子 AndroidKeystoreBrute_v1.02.jar -m 3 -k密钥库-d单词表 。
- 奇怪的是,有时,当我很快到Eclipse中输入我的密码,我的别名将显示出来,我可以成功导出我的申请。 (我知道这是疯了)。
- 更新Java版本。
如果我的密码非常快速输入有效,有时候。
似乎打开了Eclipse和输入密码的第一次让我使用的密钥库。
显然,如果一切都失败了,我会创建一个新的密钥存储。 我真的想获得这个解决了,我只是不知道现在做什么用新的密钥,除了重新发布。
如果密钥无法被正确恢复,我可能会开在Github源了。
解决方案(14年6月29日):
特别感谢用户Erhannis!
下面是我做的:
该命令将每一次报错了对我道:
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
既然你告诉我,我们可以提取从Java密钥库(.jks)私人密钥,我挖更深,结束了使用该命令的变化。 我跟着你贴的链接在这里和这里 :
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://code.google.com/p/android-keystore-password-recover/
StackOverflow的URL列表我已阅读:
如何处理在Android中丢失的存储密码?
无效的密钥库的问题?
安卓:我失去了我的Android密钥库,我该怎么办?
我失去了我的.keystore文件?
忘记库密码,思维蛮力检测。 将它损坏密钥库?
我已经失去了为Android密钥库文件的密码
问题运行我签约,发行密钥存储在Eclipse
Android的-忘记库密码。 我可以解密的密钥存储文件?
Android的版本密钥库的问题:“密钥库被篡改,或密码不正确”