安卓密钥库停止工作错误:我正在使用的软件:以下是我所知道的:以下是我所做的:以下是导出已签名应用程序的方法:还有什么需要弄清楚或尝试的?用户建议:总结更新 (6/29/14)解决方案 (6/29/14):解决方案

2022-08-31 19:39:04

就在最近,我在密钥存储方面遇到了问题。我知道关于这个问题已经有很多问题了。我已经阅读了它们,并疯狂地谷歌搜索。

错误:

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/

我读过的StackOverflow URL列表:

如何处理在安卓系统中丢失的密钥库密码?

无效的密钥库问题?

安卓:我丢失了我的安卓密钥商店,我该怎么办?

我丢失了我的 .keystore 文件?

忘记了密钥库密码,想到了暴力破解检测。它会损坏密钥库吗?

我丢失了安卓密钥库文件的密码

在 Eclipse 中运行我的已签名、释放密钥库时出现问题

安卓 - 忘记密钥库密码。我可以解密密钥库文件吗?

Android 发布密钥库问题:“密钥库被篡改,或者密码不正确”


答案 1

我可能遇到了同样的问题。我从来没有弄清楚为什么它失败了(尽管我想知道是否是因为密钥库密码短于6位),但我能够将我的密钥复制到一个新的密钥库中,然后我重命名它以替换旧的密钥库,并且它在那之后神秘地工作(使用新密码)。顺便说一句,需要密钥密码。在 https://security.stackexchange.com/a/3795,我做了以下工作:

  1. keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
  2. 已输入新密钥库密码两次
  3. 当它要求我输入源密钥库密码时命中(将其留空)Enter
  4. 已输入密钥密码

在仔细检查新版本是否正常工作后,我只是将其复制到旧版本上。希望它对您有用;祝你好运。


答案 2

我遇到了同样的问题,我尝试了此线程中建议的所有内容,但没有任何东西能够保存我的别名密码。关键是我对密码绝对确定,因为我已经更新了该应用程序四次。我收到“密钥库被篡改,或密码不正确”消息。

解决方案

似乎在使用 eclipse 创建密钥库时,在密码前面添加了一个空格字符!

这个令人讨厌的错误显然在更高版本中得到了修复,使我无法使用我认为是正确的密码对我的应用程序进行签名。

基于这个SO链接:Ant在更新到android v20后无法构建签名的apk,我建议您尝试在密码之前添加空格字符


推荐