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


98

我忘记了我的密钥库密码,而且我真的不知道该怎么办(我不能或不会为此找任何借口)。我想更新我的应用程序,因为我刚刚修复了一个错误,但现在不可能了。如果我使用相同的密钥库但创建一个新密钥会怎样?我仍然可以更新该应用程序,如果无法更新,该如何向用户提供有关更新版本的信息?

如果有人遇到这样的问题或遇到麻烦,您能提供什么建议来帮助纠正这种情况?幸运的是,它是一个免费的应用程序。


Google+上的Zach Klippenstein与您一样遇到了同样的问题。您可以在此处关注主题。
自由PHP程序员

如果您使用的是React Native,则可以在gradle.properties中找到它
colemerrick

Answers:


44

看到这个链接

不幸的是,但是当您丢失密钥库或密钥库的密码时,您的应用程序将被孤立。您唯一可以做的就是使用新密钥将您的应用重新提交到市场。

始终备份您的密钥库,并在安全的位置写下密码。


因此,我能做的最好的就是仅上传该应用程序的另一个版本,并尝试从标题或先前的应用程序或类似内容中进行描述。对?
irobotxx

1
实际上,只需取消发布您当前的应用程序,然后将其替换为具有相同标题和描述的新版本,并希望您的用户最终能找到它。确保这次记下密码;)
Zebaz 2011年

您有3次尝试将其正确设置。如果第三次尝试错了,则需要关闭向导并重新打开它。即使您在第4次输入了正确的密码,它也会告诉您这是错误的。通过尝试通过命令行运行keytool并观察其重试限制,我发现了这一点。
松饼人

@Zebaz如果我丢失了密钥库密码,是否可以通过捆绑包上传?还是为此,我也需要密码?
Ponomarenko Oleh

1
您可以创建一个新的jks文件,并要求Google让您使用它来签署以前的应用程序
Rahul Gaur

223

我自己刚刚遇到了这个问题-幸运的是,我能够在Gradle的一些临时文件中找到密码。万一有人落在这里:

尝试寻找这个文件

..Project\.gradle\2.4\taskArtifacts\taskArtifacts.bin

or

.gradle/3.5/taskHistory/taskHistory.bin
.gradle/5.1.1/executionHistory/executionHistory.bin
.gradle/caches/5.1.1/executionHistory/executionHistory.bin

并搜索

storePassword

它以明文形式存在。通常,如果您确实记得密码的至少一部分,请尝试搜索包含该子字符串的文件,并希望您能从中得到一些东西。

想把它扔在这里,也许最终会帮助一个人。


编辑: 从评论中添加了新的见解,只是为了使其更加可见。

感谢Vivek Bansal,Amar Ilindra和Uzbekjon的帮助。


33
给这个人一个勋章...让其他人更快地找到密码:几次搜索“ .keyPassword”,您将看到密码。非常感谢@ EldoRado1239 :)
Kermia

9
试试.storePassword
Vivek Bansal

6
如果您使用的是OSX / Linux,则可以运行此命令轻松获取存储的密码条目:strings taskArtifacts.bin | grep storePassword -A1 顺便说一句,谢谢ElDoRado1239 -您节省了我很多时间。
詹姆斯·尼克·西尔斯

4
如果找不到上面的路径,请尝试使用此路径..Project \ .gradle \ 3.5 \ taskHistory \ taskHistory.bin
Amar Ilindra

2
帮助我可以在5.1.1gradle中找到任何提及的目录
James Christian Kaguo

43

如果提供了错误的密码(即使只有一次),它还会在下次尝试时提示:

密钥库被篡改或密码错误。

即使您提供的是正确的。我尝试了几次,也许是某种保护。
关闭导出向导,然后使用正确的密码重新启动,现在可以使用了:)


8
您是什么意思“关闭导出向导”
Sagar Chavada

什么是导出向导?
Jigar Fumakiya

38

蛮力是你最好的选择!

这是一个帮助了我的脚本:

https://code.google.com/p/android-keystore-password-recover/wiki/HowTo

您可以选择为其提供密码可能包含的单词列表,以实现非常快速的恢复(对我而言,它在不到1秒钟的时间内就起作用了)


不幸的是,它对我没有用。我给出了一个单词列表,后来我发现它是按一定顺序排列的三个单词,但我必须自己弄清楚。不过,感谢您的分享,很高兴它对其他人有所帮助
Teo Inke

它为我完美地工作!只有10秒和正确的字典
gyss

它可以恢复内部密钥的密码,但是如果我也丢失了密钥库本身的密码怎么办?@kiruwka说这不是他的答案 ……他真的是这个意思吗?
SebasSBM

26

转到taskHistory

终于我花了两天后找到了解决方案...

跟着这些步骤:

  1. 前往专案
  2. 在.gradle中,找到我的gradle版本文件夹(在我的情况下是4.1)(请参阅图片)
  3. 展开4.1文件夹,然后在taskHistory文件夹中找到taskHistory.bin文件。
  4. 在android studio本身中打开taskHistory.bin文件。
  5. 搜索“ .storePassword” ..就这样,您获得了密钥库密码。

这确实对我有用。

试试这个,快乐的编码!!!


不幸的是,使用Android 3.5.3时,.bin文件没有任何相关信息。
RominaV

19

在MAC启动控制台实用程序上,向下滚动到〜/ Library / Logs-> AndroidStudio-> idea.log.1(或任何旧的日志编号),然后搜索“ keystore”,它应该出现在日志中的某个位置。

原始问题:链接


这为我节省了一个客户的生命-所有其他选项均无法使用,因为我们结合了使用gulp脚本和cordova / phonegapp应用程序
rarspace01 '16

使用“密钥库”,而是用“key.password”我无法找到它
CEED

17

解决方案2019(Windows,Android Studio 3.3,gradle 4.10):

仅当先前标记了“记住密码”复选框时,此解决方案才有效。

首先,此版本的gradle不存在taskArtifacts.bin,idea.log显示密码的星号。过去的解决方案对我不起作用。

在哪里找到明文密码:C:\ Users \ {用户名} \ AndroidStudioProjects \ {project} \ app \ build \ intermediates \ signing_config \ release \ out \ signing-config.json

密钥:mStorePassword和mKeyPassword。

我真的希望它能帮助其他人。


哇!它也可以在Ubuntu中使用!我不知道该如何感谢你!
زياد

可以确认它仍在AS 3.5.3上正常工作-谢谢!
RominaV

17

实际上,丢失keystore password并不是问题。
您可以使用以下keytool命令创建新的密钥库并为其设置新密码。您不需要原始的密钥库密码:

keytool -importkeystore -srckeystore path/to/keystore/with/forgotten/pw \
-destkeystore path/to/my/new.keystore

出现提示时,只需按Enter即可为您的密码new.keystore源密钥库密码(您丢失的密码)创建密码。 您将收到有关未选中完整性的警告,并且将使用与新设置的密码相同的new.keystore。

与之相对,实际上使您的私钥保持加密,之所以这样做的原因keystore password仅是为了提供的完整性keystore,而不会使用对其进行private key password加密。

请注意,您必须知道要private key password对应用程序进行签名。好吧,如果它与被遗忘的一样,keystore password那么您可以像@Artur的答案一样诉诸蛮力。

这种方法一直对我有用。


我尝试了这个,它使您输入了目的地的密码。如果您一直按Enter键,它将告诉您3次尝试后再试一次。
松饼人

@TheMuffinMan抱歉,没有完全解决您的问题。您是否使用新的密钥库pw创建了新的密钥库?
kiruwka 2015年

1
这为我提供了一个新的密钥库,但是当我尝试使用该新密钥库时,会收到错误消息jarsigner: key associated with mykey-release not a private key。我想念什么吗?
phihag

@phihag我面临着同样的问题。请您找到解决方案吗?
Teddy Kossoko

13

我觉得我需要做出回答,因为这可能不仅仅是评论。就像@ ElDoRado1239在他的回答中说的那样(不要忘了投票;)

  • ..Project\.gradle\2.4\taskArtifacts\taskArtifacts.bin在我的情况下寻找是..Project\.gradle\2.2.1\taskArtifacts\taskArtifacts.bin因为我使用gradle 2.2.1
  • 然后寻找storePassword@Moxet Khan在评论中说的...在我的情况下是在线signingConfig.storePassword¬í t my.forgoten.password—signingConfig.keyAlias

希望能帮助别人!


12

幸运的是,我从Android Studio日志中找到了丢失的密码以及密钥库路径和别名。

如果您正在运行基于linux / Unix的计算机。

导航到“库日志”目录

cd ~/Library/Logs/

在这里,如果您还记得用来构建最新版本APK的android studio版本。导航到该目录

例如:cd AndroidStudio1.5 /

在其中,您将找到日志文件。在任何日志文件(idea.log)中,您都会找到密钥库凭据

-Pandroid.injected.signing.store.file=/Users/myuserid/AndroidStudioProjects/keystore/keystore.jks, 
-Pandroid.injected.signing.store.password=mystorepassword, 
-Pandroid.injected.signing.key.alias=myandroidkey, 
-Pandroid.injected.signing.key.password=mykeypassword,

我希望这对Android Studio用户有帮助


11
我认为这在AndroidStudio3.0上不起作用,所有信息显示为*******,且密钥库密码和密钥密码的长度相同。
TheLearner 2017年

这正是我找到密码的地方,谢谢您的发帖。我还编辑了上面的答案。这两个位置是救星,我希望将来Android Studio中的Keystore Tool可以警告用户保存密码,因为他们需要一年或两年后才能发布另一个密码。
MG开发人员

11

可能会有点晚,但可以肯定会有所帮助。如果您记住某些内容,可以搜索密码,否则尝试搜索

signingConfig.storePassword

另外,如果您忘记了密钥别名,则可以在此处找到还搜索诸如signingConfig.keyAlias之类的内容。

Project.gradle \ 3.3 \ taskArtifacts \ taskArtifacts.bin

希望对别人有帮助


9

对于可能遇到此问题的其他人,我想分享一个答案,可能对您或浏览本文的其他人(例如我自己)都是如此。

我正在使用Eclipse,并在其中为我的1.0版本创建了密钥库。快进3个月,我想将其更新为1.1。当我在Eclipse中选择Export ...并选择该密钥库时,我记得的所有密码都无法使用。每次说“密钥库被篡改或密码错误”。 到了某种程度,我已经准备好在它可以运行(一个星期左右)的时间内尝试对其进行暴力破解程序,以使其正常工作。

幸运的是,我在Eclipse之外对未签名的.apk文件进行了签名。瞧-奏效了!我的密码一直正确! 我不确定为什么,但是即使我的密码正确,通过“导出”菜单在Eclipse中对其进行签名也报告了错误。

因此,如果您遇到此错误,请按照以下步骤操作(摘自Android文档),以帮助您将APK做好准备投入市场。

注意:要从Eclipse获取未签名的apk:右键单击项目> Android Tools>导出未签名的应用程序

  1. 使用密钥库签署未签名的APK文件

    一个。打开管理员cmd提示符,然后转到“ c:\ Program Files \ Java \ jdk1.6.0_25 \ bin”或您拥有的任何Java版本(在其中复制了未签名的APK文件和密钥库)

    b。在带有密钥库文件和未签名apk在同一目录中的cmd提示符下,键入以下命令:jarsigner -keystore mykeystorename.keystore -verbose unsigned.apk myaliasnamefromkeystore

    C。它会说:“输入密钥库的密码:”。输入它,然后按回车键。

    d。===>成功看起来像这样:

    adding: META-INF/MANIFEST.MF
    ...
    signing: classes.dex

    e。未签名的版本已被覆盖,因此您签名的apk文件现在与未签名的文件具有相同的文件名

  2. 使用ZipAlign压缩签名的apk文件以在市场上分发

    一个。打开admin cmd提示符,然后转到“ c:\ AndroidSDK \ tools”或安装Android SDK的任何位置

    b。输入此命令:zipalign -v 4signed.apksignedaligned.apk

    C。===>成功看起来像这样:

    Verifying alignment of signedaligned.apk (4)
    50 META-INF/MANIFEST.MF (OK - compressed)
    ...
    1047129 classes.dex (OK - compressed)
    Verification succesful

    d。已签名和对齐的文件位于signedaligned.apk(您在上一个命令中指定的文件名)

========>准备提交到市场


收到有关密码不正确的错误的原因是,隐式设置的keyalg / sigalg / digestalg错误。对于这些值,不同版本的Java具有不同的默认值。
Will Vanderhoef

当eclipse拒绝我的密码时,我感到非常紧张,但是当我尝试使用您的方式时,它就起作用了,谢谢!
Hardik4560 2014年

9

在花了将近一天的时间研究了用于恢复Android Studio中丢失的密钥库密码的可能选项之后。我发现了以下4种可能的方法:

  1. 使用AndroidKeystoreBrute检索密码。当您部分忘记密码时,此方法非常有用,这意味着您仍会想到一些密码提示。

  2. 如果您先前已在同一台计算机上发布了该应用程序(已找到其密钥库密码),则还可以通过Android Studio日志文件检索该文件。请参考以下目录:

    Mac OSX

    〜/ Library / Logs / AndroidStudio / idea.log.1

    Linux(可能的位置)

    / home /用户名/ AndroidStudio / system / log

    Windows(可能的位置)

    C:\ Users \用户名\ AndroidStudio \ system \ log

    Pandroid.injected.signing.key.password在文件中搜索。如果您以前使用与您当前使用的Android Studio版本相同的版本对应用程序进行了签名,则会看到密码。

  3. 您也可以通过项目的.gradle目录检索密码。寻找以下路径

    project_directory / .gradle / 2.4 / taskArtifacts / taskArtifacts.bin。

    注意:这似乎不适用于较新版本的Gradle(2.10及更高版本)。

  4. 如果以上解决方案均不起作用,则可以尝试使用该解决方案,但对于该解决方案,您还必须具有Android Studio IDE应用或,这是您的项目密钥存储区密码已被较早保存的首选项(在签署密码时使用“记住密码”选项)应用)。您可以从以下路径获取IDE首选项:

    Mac OSX

    〜/ Library / Logs / AndroidStudio / idea.log.1

    Linux(可能的位置)

    / home /用户名/ AndroidStudio

    Windows(可能的位置)

    c:\ user \ username \ .AndroidStudio

    如果您拥有旧IDE的首选项,或者将旧IDE的首选项导入新的IDE中,然后将密钥库文件放置在与以前签名时相同的路径中,并且最后一次保存密码,则只需使用旧的Android Studio IDE。

    这样,一旦您打开项目并尝试Build-> Generate Signed APK,然后从较旧的位置选择密钥库文件。它将自动检索密码,并继续生成签名的APK以供发布。

    发行APK成功生成后,您可以按照前面提到的选项2从日志文件中检查密码,以获取最近生成的发行APK。


在日志中搜索很有帮助。谢谢,您救了我的平静
Rommex

我已经找到了idea.log.1。我怎么打开它?
KZoNE '17

你们是救命的人。在idea.log.12中找到了我的-只需将其作为txt打开即可!
维克多·R。奥利维拉

7

首先下载AndroidKeystoreBrute_v1.05.jar,然后按照给定的图像进行操作。在此处输入图片说明

准备一个像(wordlist.txt)这样的wordlist文件,在该文件中给你提示

密码提示:

使用者

用户数

密码

密码

pa55word

密码

@

*

$

1个

2

123

789

你会得到你的密码。


您好,我没有得到结果。请帮助
Nimisha V

@NimishaV您面对什么问题
Srinivas Keerthiprakasam '19

7

获取密钥库密码的最简单方法

project_folder \ app \ build \ intermediates \ signing_config \ release \ out \ signing-config.json

在signing-config.json中检查此文件以搜索StorePassword

{"mName":"externalOverride","mStoreFile":"C:\\Users\\dAvInDeR\\Desktop\\KEYSTORE\\keystore.jks","mStorePassword":"1234@#abcd","mKeyAlias":"uploadkey","mKeyPassword":"1234@#abcd","mStoreType":"jks","mV1SigningEnabled":false,"mV2SigningEnabled":false}

完全希望它将对您有帮助。


2
这实际上是您尝试的最后一个密码,可以被用户尝试使用其他密码。然后,他们将得到错误的密码
阿米尔多拉。

它仅是最后一次生成的APK密码,并且在您生成新apk时json文件一直处于更改状态
Tarit Ray

这挽救了我的一天!
Chathurika Senani

你真的救了我!
Benhar Upasana

5

将此添加为另一种可能性。答案可能就在您的鼻子下-如果您在过去的某个时候碰巧指定了签名配置,则在应用程序的build.gradle文件中:

signingConfigs {
    config {
        keyAlias 'My App'
        keyPassword 'password'
        storeFile file('/storefile/location')
        storePassword 'anotherpassword'
    }
}

你感到幸运吗?


3

我一下子遇到了同样的问题。即使使用Google Play进行应用签名,丢失密钥库或其密码并不像以前那样大不了,但作为开发人员,我们还是宁愿更改其密码并使用生成的密钥库文件,而不必等待几天来谷歌处理它。(为了解决这个问题,与谷歌使用这个链接,以请求),以处理自己这个问题,首先下载两个.java文件从该链接。然后通过以下方式编译ChangePassword.javajavac ChangePassword.java命令。那你跑完之后

java ChangePassword <oldKeystoreFileName.keystore> <newKeystoreFileName.keystore>

更改oldKeystoreFileName.keystore与您当前的密钥库文件的路径/名称,newKeystoreFileName.keystore与新生成的新的密钥存储文件路径/文件名。这将促进您

输入密钥库密码:

。只需输入您喜欢的内容即可:)不必是丢失的原始密码。然后使用*输入新密码

新的密钥库密码:

  • 瞧,就是这样。这不会更改密钥库的校验和,也不会在应用程序签名或上传到play.google事件中造成任何问题。

@SIW,我通过使用旧的带有ChangePassword的新密钥库来更改密码。当我要签名时,我得到的别名关联的密钥不是私钥
Teddy Kossoko


3

如果您能够从PC上构建应用程序,但是您不记得密码,可以通过以下操作来检索密码:

方法1:

在您的build.gradle中,添加println MYAPP_RELEASE_KEY_PASSWORD以下内容:

signingConfigs {
    release {
        if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
            storeFile file(MYAPP_RELEASE_STORE_FILE)
            storePassword MYAPP_RELEASE_STORE_PASSWORD
            keyAlias MYAPP_RELEASE_KEY_ALIAS
            keyPassword MYAPP_RELEASE_KEY_PASSWORD
            println MYAPP_RELEASE_KEY_PASSWORD
        }
    }
}

之后,运行 cd android && ./gradlew assembleRelease

方法2:

运行keytool -list -v -keystore your <.keystore file path>例如keytool -list -v -keystore ./app/my-app-key.keystore。

它将要求您输入密钥库密码:只需在此处按Enter键。您将可以找到映射到别名的名称:

然后,grep -rn "<your alias name>" .在您的终端中运行,您将能够看到您的signing.json文件,如下所示:

./app/build/intermediates/signing_config/release/out/signing-config.json

该文件将使用密钥“ mKeyPassword”将您的密码设置为json格式:“ <您的密码>”


3

在Ionic中,我可以在这里找到它: /app/platforms/android/app/build/intermediates/signing_config/release/out/signing-config.json

也许这会帮助某人。干杯。


非常感谢!
Hugo Ramos

2

如果两个密码都不相同,Android暴力破解将无法工作,因此最好的选择可能是尝试查找名为的文件

对数思想

在您的C:/ users /您的命名帐户中,您可能会发现在android文件夹中的记事本中打开文件lpg.idea,然后搜索

别名

使用记事本中的“查找”选项,您会发现那里已经显示了密码,别名和别名密码


应该是idea.log。
费利克斯


2

如果没有任何效果,请尝试以下行。移至.jks的存储路径。在命令提示符下运行此命令。它将要求输入密码,忽略该密码并按Enter。

keytool -list -keystore sample.jks




1

总结一下,这个问题有3个答案(解决方案不是公认的答案):

  1. 如果您的日志完整无缺,则可以按照上述Georgi Koemdzhiev的答案在Android Studio日志文件中找到密码。

  2. 您可以按照上述ElDoRado1239Gueorgui Obregon的回答从.gradle目录中的'taskArtifacts.bin'文件中检索密码。这似乎不适用于较新版本的Gradle(2.10及更高版本)。

  3. 根据上面的Srinivas Keerthiprakasam的回答,使用AndroidKeystoreBrute猜测或暴力破解您的密码。

链接将深入介绍所有这三种解决方案。


1

就我而言,即使我存储了正确的密码,我还是得到了错误的别名。所以我认为这是错误的密码(使用离子包装),所以我使用了此命令来获取别名

keytool-列表-v -keystore

而且我能够再次使用密钥库!


1

C:\ Users \ admin \ AndroidStudioProjects \ TrumpetTVChannel2.gradle \ 2.14.1 \ taskArtifacts \ taskArtifacts.bin

第一次尝试创建新的密钥库。...然后用记事本打开taskArtifacts.bin并查找您刚刚输入的密码...。您将能够找出您刚刚输入的密码附近的单词,然后在这些位置附近搜索这些单词。您的密码在同一文件中....您将能够找出密码..... :)


1

解决方案2018:如果您缺少密码或jks文件,请使用新的密钥库文件对应用程序进行签名。

1)用命令行创建新的keystore.jks文件(不是android studio构建菜单)

keytool -genkeypair -alias upload -keyalg RSA -keysize 2048 -validity 9125 -keystore keystore.jks

Windows示例: "C:\Program Files\Android\Android Studio\jre\bin\keytool.exe" -genkeypair -alias upload -keyalg RSA -keysize 2048 -validity 9125 -keystore "C:\keystore_new.jks"

2)从新的密钥库生成一个.pem文件

keytool -export -rfc -alias upload -file upload_certificate.pem -keystore keystore.jks

Windows示例: "C:\Program Files\Android\Android Studio\jre\bin\keytool.exe" -export -rfc -alias upload -file "C:\upload_cert.pem" -keystore "C:\keystore_new.jks"

3)使用此支持表格,设置“密钥库问题”,并在附件中添加.pem文件: https : //support.google.com/googleplay/android-developer/contact/otherbugs

4)在12-48h启用新的密钥库。使用签名有新密钥库:D的新APK更新Playstore上的应用


我认为这是针对那些选择使用Google应用登录选项的人?
Sumit Kumar

0

无需使用暴力破解,一种简单的方法就是找到您的纯文本密码。

去:

C:\Users\<your username>\AndroidStudioProjects\WhatsAppDP\.gradle\2.2.1\taskArtifacts

打开:

taskArtifacts.bin 

当您打开taskArtifacts.bin看起来很加密时,不必担心会多次搜索“ .keyPassword”。然后,您将以纯文本形式找到密码。它可能类似于:

signingConfig.keyPassword¬í t <your password>Æù

希望这会有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.