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

我已经忘记了我的密码,我真的不知道该怎么办了(我不能或不会给它任何借口)。我想更新我的应用程序,因为我刚刚修复了一个错误,但它不可能了。如果我使用相同的密钥存储库但是创建了一个新的密钥会发生什么?我是否仍然可以更新应用程序,如果不可能,我怎样才能向用户提供有关更新版本的信息?

如果有人遇到了这样的问题或者遇到了麻烦,你能给出什么建议来帮助解决这个问题呢?幸运的是,这是一个免费的应用程序。

221229 次浏览

参见 这个链接

It's unfortunate, but when you lose your keystore, or the password to your keystore, your application is orphaned. The only thing you can do is resubmit your app to the market under a new key.

ALWAYS backup up your keystore and write the passwords down in a safe location.

对于任何其他可能遇到这个问题的人,我想分享一个答案,这个答案可能适用于你或者其他浏览这篇文章的人(比如我自己)。

我正在使用 Eclipse,并在其中为我的1.0版本创建了密钥存储库。快进3个月,我想把它升级到1.1。当我在 Eclipse 中选择 Export... 并选择密钥存储库时,我记得的所有密码都不起作用。每次它说 “密钥存储被篡改或密码不正确”它到了一个点,我正准备运行一个蛮力程序对它只要我可以站(一个星期左右) ,试图让它工作。

Luckily, I to sign my unsigned .apk file outside of Eclipse. Voila - it worked! My password had been correct the entire time! 我不知道为什么,但是在 Eclipse 中通过 Export 菜单进行签名时,即使我的密码是正确的,也会报告错误。

所以,如果你得到了这个错误,这里是我的步骤(从 Android 文档) ,以帮助您得到您的平板电脑准备市场。

注意: 要从 Eclipse 获取未签名的 apk: 右键单击 project > Android Tools > Export Unsigned Application

  1. 用密钥库签名未签名的 apk 文件

    打开管理员 cmd 提示符,转到“ c: Program Files Java jdk1.6.0 _ 25 bin”或任何版本的 Java (其中已经复制了未签名的 apk 文件和密钥存储库)

    在 cmd 提示符下,键入 keystore file 和同一目录下的 unsignedapk,键入以下命令: jarsigner-keystore mykeystorename.keystore-verose unsignd.apk myaliasnamefromkeystore

    c. it will say: "Enter Passphrase for keystore:". Enter it and press Return.

    成功是这样的:

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

    e. the unsigned version is overwritten in place, so your signed apk file is now at the same file name as the unsigned one

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

    打开 admin cmd 提示符,转到“ c: AndroidSDK tools”或安装 Android SDK 的任何地方

    输入以下命令: zipalign-v4 signed.apk signedaligned.apk

    成功是这样的:

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

    D. 已签名和对齐的文件位于 signedaligned.apk (在前面的命令中指定的文件名)

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

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

密钥存储库被篡改或密码不正确。

即使你提供的是正确的,我试了好几次,也许这是某种保护。
Close the export wizard and start it again with the correct password, now it works :)

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

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

当出现提示时,为您的 new.keystore源密钥存储库密码(您丢失的)创建密码,然后单击 进来
您将收到关于未检查完整性的警告,并且您将获得与具有新设置的密码的原始版本相同的 new.keystore。< br >

这样做的原因是 keystore password只用于提供 keystore的完整性,它不用 keystore加密数据,相比之下,private key password实际上保持了私钥的加密。

Please note, that you must know your private key password to sign your apps. Well, if it is same as forgotten keystore password then you can resort to bruteforce as in @Artur's answer.

这种方法对我总是奏效。

野兽是你最好的选择!

下面是一个帮助我摆脱困境的剧本:

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

您可以选择给它一个单词列表的密码 也许吧包括一个非常快的恢复(对我来说,它工作在 < 1秒)

我自己也遇到了这个问题——幸运的是,我能够在一些 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
.gradle/5.1.1/executionHistory/executionHistory.bin
.gradle/3.5/taskHistory/taskHistory.bin
.gradle/2.10/taskArtifacts/taskArtifacts.bin

寻找

storePassword

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

Wanted to throw it out here, maybe it will eventually help someone.


Edit: Added new insight from comments, just to be more visible. 编辑2: < em > 添加了一些在评论中报告的位置。

感谢维韦克班萨尔,阿马尔伊林德拉和乌兹别克琼为这些。

On a MAC launch Console utility and scrolled down to ~/Library/Logs -> AndroidStudio ->idea.log.1 (or any old log number) 然后我搜索“ keystore”,它应该出现在日志的某个地方。

原问题: 链接

首先下载 AndroidKeystoreBrute _ v1.05.jar,然后跟随给定的映像。enter image description here

prepare one wordlistfile like(wordlist.txt), in that file give your hint like

密码提示:

用户

用户

Password

密码

单词 pa55

Password

@

*

#

$

&

1

2

123

789

你会拿到密码的。

如果你的两个密码不同,Android 的蛮力将不起作用,所以最好的选择可能是尝试找到名为

log.idea

在你的 C:/users/your name account 然后你可能会发现在 android 文件夹中打开笔记本中的 lpg.idea 文件,然后搜索

化名

使用笔记本中的 find 选项,您会发现密码和别名以及别名密码已经显示在那里

我觉得我需要一个答案,因为这不能只是在评论。 Like @ ElDoRado1239在他的回答中说 (dont forget to upvote his answer ;)

  • 在我的案件中寻找 ..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

希望帮助别人! ! !

幸运的是,我找到了丢失的密码以及来自 Android 工作室日志的密钥库路径和别名。

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

Navigate to Library Logs directory

cd ~/Library/Logs/

在那里,如果你还记得你的安卓工作室版本,你用来建立最后发布 APK。导航到该目录

例如: 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 用户有所帮助

总结一下,这个问题有三个答案(答案不是由公认的答案给出的) :

  1. 如果您的日志完好无损,那么您可以按照上面的 Georgi Koemdzhiev 的答案在 Android Studio 日志文件中找到密码。

  2. 您可以从“ taskArtifacts.bin”文件中检索密码。根据上面的 ElDoRado1239Gueorgui Obregon 的答案,划分目录。这似乎不适用于新版本的 Gradle (2.10及以上版本)。

  3. 根据上面的 Srinivas Keerthiprakasam 的答案,使用 AndroidKeystoreBrute 来猜测或强制输入密码。

所有这3种解决方案都在本次 链接会议上进行了深入讨论。

不需要使用暴力的一个简单的方法是找到您的纯文本密码。

前辈:

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

开放:

taskArtifacts.bin

当您打开 taskArtifacts.bin 时,它可能看起来是加密的,不要担心搜索。“密码键”了好几次。然后您将发现您的密码在纯文本。它可能类似于:

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

Hope this was helpful.

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

  1. 使用 AndroidKeystoreBrute检索密码。当你部分忘记你的密码时,这个方法非常有用,这意味着你的脑海中仍然有一些密码的提示。

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

    Mac OSX

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

    Linux (可能的位置)

    /home/user _ name/AndroidStudio/system/log

    视窗(可能位置)

    C: Users user _ name AndroidStudio system log

    并在文件中搜索 Pandroid.injected.signing.key.password。如果您之前使用与当前查看的 Android Studio 版本相同的应用程序签名,那么您将看到密码。

  3. 还可以通过项目的. gradle 目录检索密码

    Project _ directory/. gradle/2.4/taskArtiacts/taskArtifacts.bin.

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

  4. 如果上面的解决方案都不管用,那么你可以试试这个,但是对于这个,你必须有 Android Studio IDE 应用程序或者它的首选项,其中你的项目密钥存储密码已经保存在前面(在签署应用程序时使用“记住密码”选项)。您可以从以下路径获得 IDE 首选项:

    Mac OSX

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

    Linux (可能的位置)

    /home/user _ name/AndroidStudio

    视窗(可能位置)

    C: user username. AndroidStudio

    如果您已经将旧的 Android Studio IDE 的首选项导入或导入到新的 IDE 中,那么只需使用旧的 Android Studio IDE,并将密钥存储库文件放在与上次签名时相同的路径中,并保存上次的密码。

    以这种方式打开项目并尝试 Build-> Generate Signed APK,然后从旧位置选择密钥存储库文件。它将自动检索密码并继续生成签名的 APK 以便发布。

    一旦成功地生成了发行版 APK,您就可以按照前面提到的选项2从日志文件中检查最近生成的发行版 APK 的密码。

在我的例子中,即使我存储了正确的密码,我还是把别名弄错了。所以我认为这是错误的密码(使用离子包) ,所以我使用这个命令得到别名

keytool -list -v -keystore

我又能用密钥库了!

要查找丢失的密钥库密码,您可以尝试这个,对我来说,下面的解决方案工作得非常好。

~/Library/Logs/AndroidStudio2.0中查找创意日志文件。您也可以通过打开 Android Studio-> Help-> Show Log in File Manager 找到这些文件。

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

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

希望能帮上忙。

I have found the password in

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

搜索

Pandroid.injected.signing.store.password

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

  1. 创建带有创建新密钥存储库和新密码的登录 apk。

  2. 现在使用旧密钥存储库(在上一次 apk 构建上传时使用的密钥存储库)再次创建签名 apk,但现在使用新的密钥存储库密码。

  3. 现在,您肯定会使用旧密钥库成功地创建签名 apk。

    • 希望这个解决方案能帮到你。

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

首先尝试创建新的密钥库... 然后用记事本打开 taskArtifacts.bin,查找你刚刚给出的密码... 你将能够找出你刚刚给出的密码附近的单词,然后在同一个文件中搜索这些接近你的密码的单词... 你将能够找出密码... :)

这可能有点晚,但它肯定会帮助某人 你可以搜索密码,如果你记得什么,否则尝试搜索

SigningConfig.storePassword

如果你忘了密钥别名,你也可以在这里找到 搜索诸如 < strong > signingConfig.keyAlias 之类的内容

Project.gradle 3.3 taskArtifact taskArtifacts.bin

希望能帮到别人

在我的案例中,我将我的 Android Studio 从2.3升级到了3.0。1,当我试图为一个新的更新生成一个签名的 apk 时,我得到了“ Keystore 被篡改了,或者密码不正确”的错误。我有我以前的 Keystore 和我是绝对肯定的密码,使用他们之前我已经更新了几次应用程序。经过大量的搜索,没有一个解决方案对我有效。我是这么做的。

  • 开了另一个项目。
  • 使用 File/New/Import Project 导入我的项目
  • 一旦 Gradle 被构建,我尝试生成一个签名的 APK
  • 单击“选择现有”并提供到我的密钥存储库的路径。
  • 键入我的密钥存储密码
  • 选择了密钥别名
  • typed in my key password (In my case both key store password and key password are the same)
  • 单击下一步,为新的 Apk 提供一个路径,并选中了这两个复选框。
  • 新的 APK 生成成功。

希望这对大家有帮助。

如果没有什么工作试试这些线。移动到路径。Jks 被存储了。在命令提示符下运行此命令。它会要求输入密码,忽略它,然后按回车键。

keytool -list -keystore sample.jks

Go to taskHistory

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

遵循以下步骤:

  1. 启动项目
  2. 在我的案例中,我的文件夹是4.1(参考图片)
  3. expand the 4.1 folder and then in taskHistory folder you will find taskHistory.bin file.
  4. 在 android 工作室中打开 taskHistory.bin 文件。
  5. 搜索“ . storePassword”. . 这就是你的密钥存储密码。

这对我很管用。

尝试这个和快乐编码! ! !

这是另一种可能性。答案可能就在你的鼻子底下——在你的应用程序的 build.gradle 文件中,如果你碰巧在过去的某个时刻指定了一个签名配置:

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

你觉得自己很幸运吗!

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

1)用命令行创建新的 keystore.jks 文件(不是 android 工作室的 build 菜单)

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-48小时,你的新密钥存储库启用。更新您的应用程序在播放商店与新的 apk 签署新的密钥存储库: D

我当时也有同样的问题。 即使有了 Google Play 的应用程序签名,丢失密钥存储库或者密码也不是什么大不了的事情,但是作为一个开发者,我们更愿意改变密码,使用生成的密钥存储库文件,而不是等待几天 Google 来处理它。 (要处理这个问题与谷歌使用此 链接发出请求) 为了自己解决这个问题, First download two .java files from this 链接. 然后通过 javac ChangePassword.java命令编译 ChangePassword.java。 然后你就可以跑了

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

使用当前密钥库文件的路径/名称更改 Keystore,使用新生成的新密钥库文件的路径/名称更改 Keystore。 这个会提升你到

输入密钥存储密码:

.只要输入你喜欢的:)没有必要是原来的密码丢失。然后用 * 输入新密码

新密钥存储库密码:

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

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

此解决方案只有在以前标记了“ Rememberpassword”复选框的情况下才有效。

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

在我发现明文密码的地方: C: Users { username } AndroidStudioProjects { project } app build mediates sign _ config release out sign-config. json

密钥: mStorePassword 和 mKeyPassword。

我真心希望能帮到别人。

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

打开 taskHistory.bin并搜索 storePassword

If you are a Mac user try checking out the Keychain Access application. My password was saved there under Passwords named org.jetbrains.android.exportSignedPackage.KeystoreStep$KeyStorePasswordRequestor. Alternatively, you can search in the Keychain Access for android to find the password in the Keychain app.

不知道密码是怎么出现在那里的。但我不记得是我放的。Android Studio 肯定也是如此。希望这对你有帮助。

Note: 在尝试使用更新后的密码进行签名之前,不要忘记使用 ABC0或 Clean Project. Otherwise, Android Studio may fail to build the apk though the password is correct.

如果 你可以在电脑上构建你的应用程序,但是你不记得密码,这里是你可以做的来检索密码:

方法一:

在 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。

它会要求您输入密钥存储库密码: 只需在这里按回车键。你可以找到映射到别名的:

Then, run grep -rn "<your alias name>" . in your terminal and you will be able to see your signing.json file as below:

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

该文件的密码为 json 格式,密钥为“ mKeyPassword”: “ < your password >”

In Ionic I was able to find it here: /app/platforms/android/app/build/intermediates/signing_config/release/out/signing-config.json

也许这能帮到别人,干杯。

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

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

看看这个文件 在 sign-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}

希望对你有所帮助。

更新: 2022年9月 用最新的版本是不行的


面对同样的问题,我也尝试了各种方法来恢复。要么我是错误的 “密钥存储库密码”“爱丽丝名字”,或可能与 “。 JKS”的名称。所以我不知道这是怎么回事,尽管我尝试了上面所有的方法,但是无法回溯。



希望这些链接中的任何一个都能对你有所帮助。


I know that this question is AGES old but I saw many answers who were basically saying brute-force is the way to go, which is simply not true because devs usually have a strong and long password, which can't be brute-forced that easily, also it takes days and you have to have your computer running 24/7, so my solution is simple - Contact the support, they will even generate a new key for you, it's the fastest solution you will get.

我很惊讶没有人提到这一点,但是你可以去 Google Play 开发者支持,他们会和你一起创建一个新的上传密钥:

Https://support.google.com/googleplay/android-developer/contact/otherbugs

我填写了一个问题,他们在1天内联系我。

更新: 在遵循他们的电子邮件指示后,我能够创建一个新的上传密钥,并在几天后启用!问题解决了。

Android Keystore Password Recovery 工具帮助我实现了 100%,但是它花费了太多的时间

为了简化这里的事情,这个解决方案在2020年适用于 gradle ver: 5.4.1

打开文件: project. gradle 5.4.1 Executive tionHistory.bin

密钥库密码:

搜索“ storePassword”文本

密码:

搜索“ 别名”文本

搜索后检查同一行或下一行中的密码。

You can contact Google Play Console Support with this issue and they will be able to reset the keystore for you to a new keystore. Then you will be able to publish future updates without having to to change the package name, and therefore you will be able to continue to be able to update the same app.

In the play console click the help button at the top > Scroll down to heed more help and click "Contact Us" > Type in you need help with a Keystore Reset > Click "next step" > Click "Upload key reset request" > Click "Contact Google Play Developer Support" > Then choose a contact method to contact them to reset it for you.

今天2/2/2021,我可以在文件名“ ExectionHistory.bin”中找到我的。 让你打开它的记事本 + + 和搜索关键密码密码。见下面附加的图片。

Https://i.stack.imgur.com/nnhfa.png

有一种方法可以重置你的密码。

转到此链接,描述您的问题(忘记密钥存储库密码) ,并生成一个令牌。 Https://support.google.com/googleplay/android-developer/contact/otherbugs

如果你很幸运,那么在1小时内你会得到一个重播。(一般来说,这需要2天)。

您将需要生成一个新密钥并上传 _ 凭证。并发送到谷歌重置。你会在邮件中得到指示。

要生成 load _ certificate. pem,请转到 android 工作室终端并输入:

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

或者,如果以前在 AndroidStudio 中使用过这个密码,但是你不记得了,你可以从你 Mac 的钥匙链中获取这个密码。

步骤:

  1. 启动“钥匙链接入”
  2. 搜索 Jetbrain
  3. 通过双击这些行来打开它们。
  4. In the details dialog, click on show password. You will have to enter your login again to unlock the keychain.

当当当!