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

如何处理Android中丢失的密钥库密码?,android,keystore,Android,Keystore,我忘记了我的密钥库密码,我真的不知道该怎么做了(我不能也不会给任何借口)。我想更新我的应用程序,因为我刚刚修复了一个bug,但这已经不可能了。如果使用相同的密钥库但创建新密钥,会发生什么情况?我还能更新应用程序吗?如果不可能,我如何向用户提供更新版本的信息 如果有人遇到过这样的问题或遇到过麻烦,你能给出什么建议来帮助补救这种情况?幸运的是,这是一个免费的应用程序。请参见 不幸的是,当您丢失密钥库或密钥库的密码时,您的应用程序将被孤立。你唯一能做的就是用新的密钥重新向市场提交你的应用程序 始终备份

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

如果有人遇到过这样的问题或遇到过麻烦,你能给出什么建议来帮助补救这种情况?幸运的是,这是一个免费的应用程序。

请参见

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


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

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

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

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

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

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

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

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

    b。在同一目录下的keystore file和unsigned apk的cmd提示符下,键入以下命令:jarsigner-keystore mykeystorename.keystore-verbose unsigned.apk myaliasnamefromkeystore

    c。它会说:“输入密钥库的密码短语:”。输入它并按Return

    d、 ==>成功是这样的:

    adding: META-INF/MANIFEST.MF
    ...
    signing: classes.dex
    
    e。未签名的版本将被就地覆盖,因此已签名的apk文件现在与未签名的文件名相同

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

    a。打开admin cmd提示符并转到“c:\AndroidSDK\tools”或安装Android SDK的任何位置

    b。输入以下命令:zipalign-v4 signed.apk signedaligned.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(您在上一个命令中指定的文件名)


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

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

    密钥库被篡改或密码不正确

    即使你提供了正确的答案。我试了好几次,也许是某种保护措施。

    关闭导出向导并使用正确的密码重新启动它,现在它可以工作了:)

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

    keytool-importkeystore-srckeystore-path/to/keystore/with/遗忘/pw\

    -destkeystore路径/to/my/new.keystore

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

    之所以这样做,是因为
    密钥库密码
    仅用于提供
    密钥库
    的完整性,它不会用它加密数据,而
    私钥密码
    实际上会对私钥进行加密

    请注意,您必须知道您的
    私钥密码才能对应用程序进行签名。好吧,如果它与忘记的
    密钥库密码相同,那么您可以像@Artur的回答一样求助于bruteforce。


    这种方法对我一直有效。

    蛮力是你最好的选择

    下面是一个帮助我的脚本:


    您可以选择给它一个密码可能包含的单词列表,以便快速恢复(对我来说,它在中工作,我自己刚刚遇到这个问题-幸运的是,我能够在某个Gradle的临时文件中找到密码。以防万一有人在这里登陆:

    尝试查找此文件

    搜索

    一般来说,如果你至少记得一部分密码,试着搜索一个包含这个子字符串的文件,希望你能找到一些东西

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


    编辑:添加了来自评论的新见解,只是为了更直观。 编辑2:添加了更多在评论中报告的位置


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

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


    原始问题:

    首先下载AndroidKeystrubrute_v1.05.jar,然后按照
    ..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
    .gradle/5.1.1/executionHistory/executionHistory.bin
    .gradle/3.5/taskHistory/taskHistory.bin
    .gradle/2.10/taskArtifacts/taskArtifacts.bin
    
    storePassword
    
    cd ~/Library/Logs/
    
    -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,
    
    C:\Users\{Username}\.AndroidStudio2.2\system\log\idea.txt
    
    Pandroid.injected.signing.store.password
    
    signingConfigs {
        config {
            keyAlias 'My App'
            keyPassword 'password'
            storeFile file('/storefile/location')
            storePassword 'anotherpassword'
        }
    }
    
    keytool -genkeypair -alias upload -keyalg RSA -keysize 2048 -validity 9125 -keystore keystore.jks
    
    keytool -export -rfc -alias upload -file upload_certificate.pem -keystore keystore.jks
    
    java ChangePassword <oldKeystoreFileName.keystore> <newKeystoreFileName.keystore>
    
    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
            }
        }
    }
    
    ./app/build/intermediates/signing_config/release/out/signing-config.json
    
    {"mName":"externalOverride","mStoreFile":"C:\\Users\\dAvInDeR\\Desktop\\KEYSTORE\\keystore.jks","mStorePassword":"1234@#abcd","mKeyAlias":"uploadkey","mKeyPassword":"1234@#abcd","mStoreType":"jks","mV1SigningEnabled":false,"mV2SigningEnabled":false}