安卓密钥库停止工作错误:我正在使用的软件:以下是我所知道的:以下是我所做的:以下是导出已签名应用程序的方法:还有什么需要弄清楚或尝试的?用户建议:总结更新 (6/29/14)解决方案 (6/29/14):解决方案
就在最近,我在密钥存储方面遇到了问题。我知道关于这个问题已经有很多问题了。我已经阅读了它们,并疯狂地谷歌搜索。
错误:
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
最新 ADT 插件
最新安卓软件开发工具包
以下是我所知道的:
- 我没有丢失密码,也从未更改过。
- 我无法找回密码(我知道通行证)。
- 如果不发布全新的应用程序,我无法使用其他密钥对现有应用程序进行签名(因此我无法发布任何更新)。
以下是我所做的:
- 我已经卸载并重新安装了Eclipse很多次。
- 我已经卸载并重新安装了安卓ADT插件。
- 我已经多次删除并重新下载了最新的Android SDK。
- 我已经卸载并重新安装了JDK7。
- 我已尝试使用密钥库的备份。
- 我使用“md5sum KEYSTORE”检查了MD5校验和,并与备份(相同的MD5输出 - 未被篡改)进行了比较。
- 我尝试过暴力破解密钥存储(我已经检索了我知道的密码)。
- 我创建了一个测试密钥(使用当前设置)并测试了密码,它似乎工作正常(所以有些东西已经改变了)。
- 我尝试过手动导出android.apk,然后尝试对其进行签名(Eclipse之外)。
以下是导出已签名应用程序的方法:
- 通过日食:使用文件导出>导出>导出Android应用程序。
- 在 JDK7 之前:jarsigner -verbose -keystore KEYSTORE FILE ALIAS。
- 使用 JDK7: jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore KEYSTORE FILE ALIAS.
还有什么需要弄清楚或尝试的?
一些引用/URL说要删除“trusted.certs”文件?尝试删除“debug.keystore”?更新 Eclipse 或任何 Android 开发工具会影响我的密钥库吗?将 Java 从 jdk6 更新到 jdk7 会产生任何问题吗?这是否会弄乱或改变jarsigner的工作方式?
用户建议:
- 尝试使用JDK6,但我最近能够导出应用程序。
-
已选中 key.store.password 或 key.alias.password in my local.properties 在 eclipse 中自动取消选中构建并清理项目-
尝试删除工作区中的 .metadata 文件夹并清除所有临时文件夹。
总结
- 密钥库没有更改,
- 我有密钥库的密码,
- 我最近使用以下命令成功导出了一个应用程序:
- Eclipse 3.8(和Eclipse 4.0+),
- 最新的 Java 7,
- 最新的 ADT 插件。
- 我上一次成功导出和构建是在几周前使用Eclipse 3.8,最新的Android工具和Java 7使用相同的密码。
更新 (6/29/14)
- 我已经使用:keytool -list -keystore KEYSTORE成功地证明并证明了我的4个密钥中有3个是有效的。
- 我暴力破解了最后一个密钥并从密钥库获取了密码(我已经知道的通行证),但是当我进入签名时密码不起作用。我用过: java -jar AndroidKeystoreBrute_v1.02.jar -m 3 -k KEYSTORE -d WORDLIST.
- 奇怪的是,有时当我非常快速地将密码输入到eclipse中时,我的别名将显示出来,我可以成功导出我的应用程序。(我知道这太疯狂了)。
- 更新了 Java 版本。
如果我很快输入密码,它有时会起作用。
似乎打开Eclipse并第一次输入密码可以让我使用密钥库。
显然,如果所有其他方法都失败了,我将不得不创建一个新的密钥存储。我真的很想解决这个问题,我只是不确定除了使用新密钥重新发布之外,现在该怎么办。
如果密钥无法正确恢复,我可能会在Github上开源它。
解决方案 (6/29/14):
特别感谢用户Erhannis!
以下是我所做的:
该命令每次都会在我身上出错:
keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
由于您告诉我我们可以从Java Keystore(.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/