Android的密钥库停止工作(Android keystore stopped working)

2019-06-21 06:42发布

就在最近,我曾与一个密钥存储的问题。 我知道有很多关于这个问题已经问题。 我已阅读所有这些,拼命用谷歌搜索。

错误:

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的版本密钥库的问题:“密钥库被篡改,或密码不正确”

Answer 1:

我可能也遇到了同样的问题。 我从来没有弄清楚它为什么失败的(虽然我不知道这是因为存储密码是少于6个位数),但我能我的钥匙复制到一个新的密钥库,然后我重新命名,以取代旧的,它之后神秘的工作(使用新密码)。 所需的关键密码,顺便说一句。 工作过https://security.stackexchange.com/a/3795 ,我做了以下内容:

  1. keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
  2. 进入新的密钥库密码两次
  3. 按下回车键时,它要求我的源库密码(左空白)
  4. 进入密钥密码

仔细检查了新的工作后,我只是复制过来的旧的。 希望这对你有用; 祝好运。



Answer 2:

尝试删除.metadata文件夹中的工作区,并清除所有的临时文件夹。 如果您的密钥库文件没有被损坏,并且您已经尝试重新正确安装了Eclipse,ADT,Android SDK和Java SDK中,我看不出有其他可能导致排除.metadata缓存文件和\或一些临时腐败这个奇怪的问题。

另一项建议

尝试使用Portecle的工具,用于管理和检查密钥库,密钥,证书,证书请求,证书吊销列表等。



Answer 3:

我有同样的问题,我试过,建议在此线程,但没有能够拯救我的别名密码的一切。 问题的关键是,我是绝对清楚的密码,因为我已经更新了应用程序已经四次。 我得到了“密钥库被篡改,或密码不正确”的消息。

解决方案

看来,在密钥库的使用eclipse的创作, 在密码前加一个空格字符!

这讨厌的错误显然是固定在一个更高版本已使我无法登录我的应用程序我认为是正确的密码。

基于此SO链接: 蚂蚁无法升级到Android V20后建签署的apk我建议你尝试的密码后,之前添加一个空格字符



Answer 4:

我会建议夫妇更多的热量和试验。

有耐心应用这些,

脚步:

  1. 在Eclipse中取消选中构建自动(项目 - >自动构建),并清理项目。
  2. 重新构建它。(右键单击该项目+建设项目)
  3. 出口项目。
  4. 选择Android的出口。(你自动对齐)
  5. 选择你的关键。 提供密码。 别名应该来在列表中。(请务必对大写锁定)。 有时候,我们给予正确的密码,但由于它帽总是失败;)
  6. 请让我知道这对你有没有用。

希望这会帮助你。



Answer 5:

你存储的值,如key.store.password或key.alias.password在local.properties文件? 要么是那些不正确的?

我很好奇,如果有出现在JDK7与JDK6创建和验证键一些bug - 这可以解释为什么你的测试工作创造了新的密钥,但旧的没有。 尝试降级到JDK6,看看是否能解决它 - 其他曾在JDK7的jarsigner麻烦就走了,当他们降级为6。如果这样的作品,提交错误报告,并要求一个补丁,因此您可以放心地升级到Java 7 :)



Answer 6:

我最近以及作战这个问题,并试图在这里和其他地方列出的所有建议。 最后确定了在我的结束导致这个错误愚蠢的错误 - 我想在这里的情况下分享这可以帮助你们。

这是更可能的情况下,如果你和我一样,有你的机器上多个Java版本,并升级您最初创建密钥库,现在当你试图签署APK的时间之间JRE / JDK。

出于某种原因,我们的编译指示是参照这样完整的Java路径:

C:\ PROGRA〜1 \的Java \ jdk1.6.0_45 \斌\的jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve

上述其中一个建议让我思考,这可能不是一个密码问题可言的,它可能是导致该问题的版本不兼容。 于是我就下面的命令:

密钥工具-list -keystore cre80ve.keystore

使用我知道密码是正确的,你瞧,这证实它是正确的密码。

后来我就在路径(旧的)Java版本的明确提及。 这使得它会自动拿起最新版本的Java(在我的情况jdk1.8.0_31)的:

-verbose的jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore cre80ve.keystore unsigned.apk cre80ve

和一切开始工作正常!

底线:它可能不是一个密码问题可言,但不同版本的Java或Android SDK造成的问题,所以记得要检查出来。

而一旦开始工作,记得备份您的密钥库和密码在安全的地方:-)



Answer 7:

我的密钥别名采空sudenly工作。 (好吧,Android的工作室和Java的一些更新后)。

我想从这个线程以及他人所有的解决方案。 在我的情况下,解决方案是令人惊讶的。 我有很少的别名密钥库。 都不是,除了工作之一,其中有密码相同的密钥库。 但不幸的是这不是我所需要的一个。 这使我没有参与的逻辑思维。 我复制一个别名与新的密钥库

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -srcalias importantalias

然后,我改变了别名密码相同,密钥存储与密码:

keytool -keypasswd -keystore new.keystore -alias importantalias

最后,我能够让我签字的apk。 它看起来像它会浪费开发的天愚蠢的错误。



Answer 8:

只是有这个问题 - 突然的Android工作室忘记了密码,并不会使用那些我曾在gradle这个文件。 我已经在同一个项目相同的密钥文件和密码连续6年!

所以我手动输入他们 - 但它的时间后失败的验证时间。 我尝试了一些东西像无效高速缓存,重新启动的Android Studio和恢复密钥库的备份,但没有任何帮助。

最后,在纯无奈之下我试图切换密钥库密码和密钥密码。 你瞧 - 它的工作! 结果我发现我切换了密码,当我进入他们到摇篮构建文件几年前,出于某种原因,我从来没有注意到。

结论:永远是100%肯定你正在做的是正确的。



文章来源: Android keystore stopped working