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

How to handle a lost KeyStore password in Android?

我忘记了我的密钥存储密码,我真的不知道该怎么做了(我不能或不会为它提供任何借口)。我想更新我的应用程序,因为我刚修复了一个bug,但它不再可能了。如果我使用相同的密钥库但创建新的密钥,会发生什么情况?我还能更新应用程序吗?如果不可能,我该如何向用户提供有关更新版本的信息?

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


我自己也遇到了这个问题-幸运的是,我在某个Gradle的临时文件中找到了密码。万一有人降落在这里,试着寻找

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

它是明文写的。一般来说,如果您至少记住了密码的一部分,请尝试搜索包含此子字符串的文件,希望您能找到一些内容。

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


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

Keystore tampered with or password incorrect.

即使你提供了正确的答案。我试过几次了,也许是某种保护。关闭导出向导并用正确的密码重新启动,现在它工作了:)


查看此链接

不幸的是,当您丢失了密钥库或密钥库的密码时,您的应用程序将被孤立。你唯一能做的就是用一个新的密钥把你的应用程序重新提交到市场上。

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


畜生是你最好的选择!

这是一个帮助我的剧本:

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

您可以选择给它一个密码可能包含的单词列表,以便快速恢复(对我来说,它工作时间小于1秒)


在Mac上启动控制台实用程序并向下滚动到~/library/logs->androidstudio->idea.log.1(或任何旧的日志号)然后我搜索"keystore",它应该出现在日志的某个地方。

原始问题:链接


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

埃多克斯1〔2〕埃多克斯1〔3〕

当提示时,为您的new.keystore和源密钥库密码(您丢失的)创建密码,只需按Enter。您将收到有关未检查完整性的警告,并且您将获得与原始文件相同的新.keystore和新设置的密码。

这项工作的原因是keystore password只用于提供keystore的完整性,它不使用它加密数据,而与private key password相反,它实际上对您的私钥进行加密。

请注意,您必须知道您的private key password才能签署您的应用程序。好吧,如果它和被遗忘的keystore password是一样的,那么你可以像在@artur的回答中那样诉诸于野蛮。

这种方法对我总是有效的。


我觉得我需要把它作为一个答案,因为这不仅仅是在评论中。就像@eldorado1239在他的回答中所说的(不要忘记推翻他的回答;)

  • ..Project\.gradle\2.4\taskArtifacts\taskArtifacts.bin在我的情况下是在..Project\.gradle\2.2.1\taskArtifacts\taskArtifacts.bin因为我使用gradle 2.2.1
  • 然后寻找像@moxet khan在评论中说的那样的storePassword…在我的例子中是在signingConfig.storePassword?í t my.forgoten.password—signingConfig.keyAlias行。

希望能帮助别人!!!!


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

如果您运行的是基于Linux/Unix的机器。

导航到库日志目录

1
cd ~/Library/Logs/

在这里,如果你还记得你的Android Studio版本,你曾经建立了最后一个版本的apk。导航到该目录

示例:CD Androidstudio1.5/

在那里你可以找到日志文件。在任何日志文件中(idea.log)您将找到您的密钥存储凭据

例子

1
2
3
4
-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用户有所帮助


可能有点晚了,但肯定会有帮助的如果你记得一些东西,你可以搜索密码,否则尝试像这样搜索

登录config.storepassword

另外,如果忘记了密钥别名,也可以在这里找到搜索类似signingconfig.keyalias的内容

Project.gradle\3.3\taskArtifacts\taskArtifacts.bin

>。</P><P>希望它能帮助别人</P></p>
<p><center> <script src=


氧化镁

我花了两天时间终于找到了解决办法…

遵循以下步骤:

  • 转到项目
  • 在.gradle中,在我的案例中找到你的gradle版本文件夹,它是4.1(参考图片)
  • 展开4.1文件夹,然后在TaskHistory文件夹中找到taskHistory.bin文件。
  • 在android studio中打开taskhistory.bin文件。
  • 搜索".storepassword"…就这样,你得到了你的密钥存储密码。
  • 这对我真的很管用。

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


    对于任何可能遇到这种情况的人,我想分享一个答案,您或浏览本文的其他人(像我自己)可能会遇到这种情况。

    我正在使用Eclipse,并在其中为我的1.0版本创建了我的密钥库。快进3个月,我想把它更新到1.1。当我选择导出时…在Eclipse中,选择了这个密钥库,我记忆中的所有密码都不起作用。每次它说"keystore被篡改或密码不正确",它就达到了我准备在它上运行一个蛮力程序的程度,只要我能站着(一周左右)尝试让它工作。

    幸运的是,我可以在Eclipse之外对未签名的.apk文件进行签名。喂-成功了!我的密码一直都是正确的!我不知道为什么,但是通过导出菜单在Eclipse中签名会报告一个错误,即使我的密码是正确的。

    因此,如果您遇到此错误,下面是我的步骤(从Android文档中采取的)以帮助您为市场做好准备。

    注意:要从Eclipse获取未签名的APK,请右键单击项目>Android工具>导出未签名的应用程序。

  • 用密钥库对未签名的APK文件进行签名

    A.打开管理员CMD提示符,转到"C:程序文件javajdk1.60y25in"或您拥有的任何Java版本(其中复制了未签名的APK文件和密钥存储库)

    b.在命令提示符下,在同一目录下键入keystore文件和unsigned apk,然后键入以下命令:jarsigner-keystore mykeystorename.keystore-verbose unsigned.apk myaliasnamefromkeystore

    它会说:"输入密钥库的密码:"。输入并按回车键。

    D.==>成功如下:

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

    e.未签名的版本被就地覆盖,因此您的已签名APK文件现在与未签名的文件名相同。

  • 使用zipagn压缩签名的apk文件,以便在市场上分发

    a.打开admin cmd提示符,转到"c:android sdk ools"或安装Android sdk的任何位置。

    b.输入此命令:zipagn-v 4 signed.apk signedAligned.apk

    C.==>成功如下:

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

    d.已签名和对齐的文件位于signedAligned.apk(上一命令中指定的文件名)

  • ==>准备好提交市场


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

  • 使用androidkeystorebrute检索密码。当您部分忘记了密码时,这个方法非常有用,这意味着您仍然有一些密码的提示。

  • 如果您以前使用同一台机器发布了应用程序(您可以找到密钥库密码),那么您也可以通过Android Studio日志文件来检索它。请参阅以下目录:

    Mac操作系统


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

    Linux(可能的位置)

    /home/user_name/AndroidStudio/system/log

    Windows(可能的位置)

    C:\Users\user_name\AndroidStudio\system\log

    在文件中搜索Pandroid.injected.signing.key.password。如果你以前用你目前正在寻找的同一个Android Studio版本签署过这个应用程序,你会看到密码。

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


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

    Note: This doesn't seem to work for newer versions of Gradle (2.10 and above).

  • 如果上述解决方案都不起作用,那么您可以尝试使用此解决方案,但对于此解决方案,您还必须具有Android Studio IDE应用程序,或者您的项目密钥库密码先前已保存的首选项(在签署应用程序时使用记住密码选项)。您可以从以下路径获取IDE首选项:

    Mac操作系统


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

    Linux(可能的位置)

    /home/user_name/AndroidStudio

    Windows(可能的位置)

    c:\user\username\.AndroidStudio

    如果您有旧的android studio ide,或者将旧的ide的首选项导入到新的ide中,那么只需使用旧的android studio ide,并将密钥库文件放在与上次签名时相同的路径上,然后保存密码。

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

    一旦发布apk成功生成,您可以按照前面提到的选项2从日志文件中检查您的密码,查看最近生成的发布apk。


  • 首先下载androidkeystorebrute_v1.05.jar,然后按照给定的image.enter image description here进行操作。

    准备一个wordlist文件(wordlist.txt),在该文件中给出提示如下

    密码提示:

    用户

    用户

    密码

    密码

    PA55字

    密码

    @

    *

    γ

    $

    和;

    一百二十三

    七百八十九

    你会得到你的密码。


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

    1
    2
    3
    4
    5
    6
    7
    8
    signingConfigs {
        config {
            keyAlias 'My App'
            keyPassword 'password'
            storeFile file('/storefile/location')
            storePassword 'anotherpassword'
        }
    }

    你觉得幸运吗?!


    解决方案2019(Windows、Android Studio 3.3、Gradle 4.10):

    此解决方案仅在以前标记了"记住密码"复选框时有效。

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

    在这里我找到了明文密码:c:users username androidstudioprojects project appuildintermediatessigning config
    eleaseoutsigning-config.json

    密钥:mstorepassword和mkeypassword。

    我真的希望它能帮助别人。


    如果您的两个密码不同,android brute force将无法工作,因此最好的选择可能是尝试查找名为

    日志创意

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

    别名

    使用记事本中的"查找"选项,您会发现密码、别名和别名密码已显示在此处。


    我在中找到了密码

    1
    C:\Users\{Username}\.AndroidStudio2.2\system\log\idea.txt

    搜索

    1
    Pandroid.injected.signing.store.password


    我同时也遇到了同样的问题。尽管通过google play签署应用程序,丢失keystore或它的密码并不像以前那样重要,但是作为一个开发者,我们更喜欢更改它的密码并使用生成的keystore文件,而不需要等待几天google来处理它。(要使用谷歌处理此问题,请使用此链接提出请求)为了自己解决这个问题,首先从这个链接下载两个.java文件。然后通过javac ChangePassword.java命令编译changepassword.java。然后你可以跑了

    1
    java ChangePassword  <newKeystoreFileName.keystore>

    将oldkeystorefilename.keystore更改为当前keystore文件的路径/名称,将newkeystorefilename.keystore更改为新生成的新keystore文件的路径/名称。这将促使你

    Enter keystore password:

    . 只需输入您喜欢的内容:)不需要是丢失的原始密码。然后输入新密码*

    new keystore password:

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

    综上所述,这个问题有3个答案(接受的答案没有给出解决方案):

  • 如果您的日志是完整的,那么您可以根据上面的Georgi Koemdzhiev的回答在Android Studio日志文件中找到密码。

  • 您可以根据上面的eldorado1239和gueorgui obregon的答案从.gradle目录中的"taskartifacts.bin"文件中检索密码。这似乎不适用于较新版本的Gradle(2.10及更高版本)。

  • 根据上面的srinivas keerthiprakasam回答,使用androidkeystorebrute来猜测或篡改您的密码。

  • 所有这三个解决方案都在此链接中进行了深入介绍。


    转到项目搜索密码的.gradle文件夹中的taskhistory.bin,向下滚动直到找到密码。


    打开taskhistory.bin,搜索storePassword

    >。</P></p>
<hr><P>在我的例子中,虽然我存储了正确的密码,但别名是错误的。所以我认为这是错误的密码(使用离子包),所以我使用这个命令来获取别名</P><P>密钥工具-列表-v-密钥库</P><P>我又能使用密钥库了!</P></p>
<hr><P>C:usersadminandroidstudioprojectsaroumptvchannel2.gradle2.14.1	askArtifacts	askArtifacts.bin</P><P>首先尝试创建新的keystore…,然后用记事本打开taskartifacts.bin并查找您刚刚给出的密码…,您将能够找出接近您刚刚给出的密码的单词,然后在同一个文件中搜索这些接近您的密码的单词…,您将能够找出密码…:)</P></p>
<hr><P>不需要使用蛮力一个简单的方法是找到你的纯文本密码。</P><P>古托:</P></p>
<div class=

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

    Open:

    1
    taskArtifacts.bin

    当您打开taskartifacts.bin时,可能看起来是加密的,不要担心多次搜索".keypassword"。然后您将找到纯文本的密码。它可能类似于:

    1
    signingConfig.keyPassword?í t <your password>?ù

    希望这是有帮助的。


    为了查找丢失的密钥库密码,您可以尝试这个方法,对于我来说,下面的解决方案非常有效。

    ~/Library/Logs/AndroidStudio2.0中查找想法日志文件。您也可以通过打开android studio->help->show log in file manager找到这些文件。

    打开idea.log文件。注意:可能有多个文件名为idea.log.1idea.log.2等,请仔细查看每个文件,直到找到密码。

    搜索"Pandroid.injected.signing.key.password"可以看到密钥密码。

    希望有帮助…


    如果您是Mac用户,请尝试签出keychain访问应用程序。我的密码保存在Passwords下,名为org.jetbrains.android.exportSignedPackage.KeystoreStep$KeyStorePasswordRequestor。或者,您可以在keychain访问中搜索android以在keychain应用程序中找到密码。

    但不确定密码是如何到达那里的。但我不记得自己把它放在那里了。安卓工作室也是如此。希望这是有帮助的。

    注意:在尝试使用更新的密码签名之前,不要忘记使用Rebuild ProjectClean Project。否则,Android Studio可能无法构建APK,尽管密码是正确的。


    我也遇到过同样的问题,我尝试了以下步骤来解决问题:

  • 通过创建新的密钥库和新密码创建sign apk。

  • 现在,通过使用旧的密钥库(在上一次apk构建上载时使用的密钥库)再次创建sign apk,但现在使用新的密钥库密码。

  • 现在您肯定会使用旧的密钥库成功地创建sign apk。

    • 希望这个解决方案对您有所帮助。

  • 在我的例子中,我将我的android studio从2.3升级到3.0.1,当我试图为一个新的更新生成一个签名的apk时,我得到了"keystore被篡改,或者密码不正确"的错误。我有我以前的密钥库,我非常确定密码,用它们我已经更新了应用程序前几次。经过大量的搜索,没有一个解决方案对我有用。这是我做的。

    • 打开了另一个项目。
    • 使用文件/新建/导入项目导入我的项目
    • 创建Gradle之后,我尝试生成一个签名的apk。生成/生成签名的APK
    • 单击"选择现有"并提供到我的密钥库的路径。
    • 输入我的密钥存储密码
    • 选择了键别名
    • 输入我的密钥密码(在我的情况下,密钥存储密码和密钥密码都是相同的)
    • 单击Next并为新APK提供路径,并选中这两个复选框。
    • 已成功生成新APK。

    希望这对任何人都有帮助。


    如果没什么用,试试这条线。移动到存储.jks的路径。在命令提示下运行此命令。它将要求输入密码,忽略该密码并按Enter。

    keytool -list -keystore sample.jks


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

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

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

    Windows示例:江户十一〔一〕号

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

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

    Windows示例:埃多克斯1〔2〕

    3)使用此支持表单,设置"keystore problem",并使用附件add.pem文件:https://support.google.com/googleplay/android-developer/contact/otherbugs

    4)12-48h您的新密钥库已启用。在PlayStore上使用用新密钥库签名的新APK更新应用程序:d


    没有什么对你有用,所以请不要使用任何方法来恢复所有没有用的最佳选择是你必须用新的密钥重新提交应用程序并取消发布旧的应用程序。