首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android密钥存储停止工作

Android密钥存储停止工作
EN

Stack Overflow用户
提问于 2018-04-09 02:55:22
回答 3查看 0关注 0票数 0

错误:

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插件

最新Android SDK

以下是我所知道的:

  • 我没有丢失密码,而且它从未改变过。
  • 我无法检索密码(我知道密码)。
  • 如果不发布一个全新的应用程序,我就不能用不同的密钥对现有的应用程序进行签名(所以我不能发布任何更新)。

以下是我所做的:

  • 我已经多次卸载和重新安装Eclipse了。
  • 我已经卸载并重新安装了AndroidADT插件。
  • 我已经删除和重新下载了最近的Android SDK多次。
  • 我已经卸载并重新安装了JDK 7。
  • 我试过使用密钥存储库的备份。
  • 我使用“md5sum keystore”检查了MD5校验和,并与备份进行了比较(相同的MD5输出--没有篡改)。
  • 我试过强迫密钥商店(我已经检索了我知道的密码)。
  • 我创建了一个测试密钥(用当前的设置),并测试了密码,它看起来很好(所以有些事情已经改变了)。
  • 我已经尝试过手动导出Android.apk,然后尝试对它进行签名(除了Eclipse)。

下面是我如何导出签名的应用程序:

  • 通过Eclipse:导出使用文件>导出>导出Android应用程序。
  • 在JDK 7之前:jarsigner-详细-keystore密钥存储文件别名。
  • 与JDK 7:jarsigner-详细-sigalgMD5withRSA-digestalgSHA1-KeyStore密钥存储文件别名。

还有什么要搞清楚的还是要尝试的?

  • 有些引用/URL说要删除“受托人.证书”文件?
  • 试着删除“调试器”?
  • 更新Eclipse或任何Android开发工具会影响到我的密钥存储库吗?
  • 将Java从jdk 6更新到JDK 7会产生任何问题吗?
  • 这会不会破坏或改变了jarsigner的工作方式?

摘要

  • 密钥存储没有改变,
  • 我有钥匙商店的密码,
  • 我最近成功地导出了一个应用程序,使用:
    • Eclipse 3.8(和Eclipse4.0+),
    • 最新的Java 7,
    • 最新的ADT插件。
  • 我最后一次成功的导出和构建是在几周前,使用了Eclipse3.8、最新的Android工具和具有相同密码的Java 7。

最新情况(6/29/14)

  • 我用过:密钥工具-列表-密钥存储库成功地证明并证明我的4把钥匙中有3把有效。
  • 我粗暴地使用了最后一个密钥,并从keystore(我已经知道的密码)中获得了密码,但是当我进入签名时密码不起作用。我用过:爪哇-JAR仙女座_V1.02.jar-m3k密钥库-d字表
  • 奇怪的是,有时当我非常快地将密码输入Eclipse时,我的别名就会出现,并且我可以成功地导出我的应用程序。(我知道这很疯狂)。
  • 更新的Java版本。

如果我输入密码非常快,它有时是有效的。

似乎第一次打开Eclipse并输入密码允许我使用keystore。

显然,如果其他所有的都失败了,我将不得不创建一个新的密钥存储。我真的很想解决这个问题,我只是不知道除了用新的密钥重新发布之外,现在该做些什么。

如果无法正确恢复密钥,我可能会在Gizub上打开它。

解决办法(6/29/14):

特别感谢用户Erhannis!

以下是我所做的:

命令每次都会出错:

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v

可以从JavaKeystore(.jks)中提取私钥,所以我进行了更深入的研究,最后使用了命令的一个变体。

keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -deststoretype pkcs12

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

keytool -importkeystore -srckeystore new.keystore -srcstoretype pkcs12 -destkeystore final.keystore -deststoretype jks
EN

回答 3

Stack Overflow用户

发布于 2018-04-09 11:37:29

我从来没有想过为什么它会失败(虽然我不知道这是不是因为密钥库密码小于6位),但是我能够将我的密钥复制到一个新的密钥存储库中,然后我重新命名它来替换旧的密钥存储库,然后它神秘地工作了(使用新的密码)。

  1. keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
  2. 输入新密钥存储库密码两次
  3. 当它要求我输入源密钥库密码时按回车(保留为空)
  4. 输入密钥密码
票数 0
EN

Stack Overflow用户

发布于 2018-04-09 12:34:45

试着移除n.metadata文件夹,并清除所有临时文件夹。如果keystore文件没有损坏,并且试图正确地重新安装Eclipse、ADT、AndroidSDK和JavaSDK,那么除了.元数据缓存文件和\或一些临时损坏之外,我看不到其他可能导致这个奇怪问题的原因。

票数 0
EN

Stack Overflow用户

发布于 2018-06-15 18:31:24

兄弟,我与遇到了和你同样的问题,我佩服你解决这个问题的毅力。可是我是小白,所以想问下这是什么情况?怎么解决?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档