Android密钥库停止工作

Jar*_*ows 50 java android keystore jarsigner apk

就在最近,我遇到了一个关键商店的问题.我知道有很多关于这个问题的问题.我已经阅读了所有内容并且用Google搜索了一下.

错误:

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
Run Code Online (Sandbox Code Playgroud)

我使用的软件:

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)
Run Code Online (Sandbox Code Playgroud)

日食

Version: 3.8.0
Build id: I20120502-2000
Run Code Online (Sandbox Code Playgroud)

最新的ADT插件

最新的Android SDK

这就是我所知道的:

  • 我没有丢失密码,它从未改变过.
  • 我无法检索密码(我知道通行证).
  • 在没有发布全新应用程序的情况下,我无法使用不同的密钥签署现有应用程序(因此我无法发布任何更新).

这是我做的:

  • 我已经多次卸载并重新安装了Eclipse.
  • 我已经卸载并重新安装了Android ADT插件.
  • 我已多次删除并重新下载了最新的Android SDK.
  • 我已经卸载并重新安装了JDK7.
  • 我已经尝试使用我的密钥库的备份.
  • 我使用"md5sum KEYSTORE"检查了MD5校验和,并与备份(相同的MD5输出 - 未被篡改)进行了比较.
  • 我尝试过强制密钥存储(我已经检索了我知道的密码).
  • 我创建了一个测试密钥(使用当前设置)并测试了密码,它似乎工作正常(因此发生了变化).
  • 我已经尝试手动导出android .apk然后尝试签名(Eclipse之外).

以下是导出已签名应用程序的方法:

  • 通过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,但我最近能够导出一个应用程序.
  • 检查了我的local.properties中的key.store.password或key.alias.password
  • 在eclipse中自动取消选中构建并清理项目
  • 尝试删除工作区中的.metadata文件夹并清除所有临时文件夹.

摘要

  • Keystore没有改变,
  • 我有密钥库的密码,
  • 我最近成功导出了一个应用程序:
    • 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 -jar AndroidKeystoreBrute_v1.02.jar -m 3 -k KEYSTORE -d WORDLIST.
  • 奇怪的是,有时当我很快将密码输入eclipse时,我的别名会出现,我可以成功导出我的应用程序.(我知道这很疯狂).
  • 更新了Java版本.

如果我很快输入密码,它有时会起作用.

看来打开Eclipse并第一次输入密码让我使用密钥库.

显然,如果所有其他方法都失败了,我将不得不创建一个新的密钥库.我真的想解决这个问题,除了用新密钥重新发布之外,我现在还不确定该怎么办.

如果密钥无法正常恢复,我可能会在Github上打开它.


解决方案(2014年6月29日):

特别感谢用户Erhannis!

这是我做的:

每次命令都会出错我:

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
Run Code Online (Sandbox Code Playgroud)

既然你告诉我我们可以从Java密钥库(.jks)中提取私钥,我会深入挖掘并最终使用命令的变体.我按照你在这里这里发布的链接:

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -deststoretype pkcs12
Run Code Online (Sandbox Code Playgroud)

在提取私钥并存储为PKCS12之后,我认为提取了我的私钥并将其放回到全新的Java Keystore中:

keytool -importkeystore -srckeystore new.keystore -srcstoretype pkcs12 -destkeystore final.keystore -deststoretype jks
Run Code Online (Sandbox Code Playgroud)

参考文献:

http://developer.android.com/tools/publishing/app-signing.html#signapp

http://code.google.com/p/android-keystore-password-recover/

我读过的StackOverflow URL列表:

如何在Android中处理丢失的KeyStore密码?

密钥库问题无效?

Android:我丢失了我的Android密钥库,我该怎么办?

我丢失了我的.keystore文件?

忘记Keystore密码,考虑Brute-Force检测.它会破坏密钥库吗?

我丢失了android Keystore文件的密码

在Eclipse中运行我签名的发布密钥库时出现问题

Android - 忘记密钥库密码.我可以解密密钥库文件吗?

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

Erh*_*nis 6

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

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

仔细检查新的工作后,我只是将它复制到旧的.希望这对你有用; 祝好运.


Ger*_*hat 5

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

解决方案

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

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

基于此 SO 链接:Ant failed to build signed apk after update to android v20我建议您尝试在密码之前或之后添加一个空格字符


归档时间:

查看次数:

15779 次

最近记录:

7 年,3 月 前