如何处理 Android 中丢失的 KeyStore 密码?
我忘记了我的密钥库密码,我真的不知道该怎么办(我不能或不会为此给出任何借口)。我想更新我的应用程序,因为我刚刚修复了一个错误,但现在不可能了。如果我使用相同的密钥库但创建新密钥会发生什么?我是否仍然能够更新应用程序?如果不可能,我该如何向用户提供有关更新版本的信息?
如果有人遇到过这样的问题或遇到过麻烦,您可以提供什么建议来帮助解决这种情况?幸运的是,它是一个免费的应用程序。
I have forgotten my Keystore password and I don't really know what to do anymore (I can't or won't give any excuses for it). I want to update my app because I just fixed a bug but it's not possible anymore. What happens if I use the same Keystore but create a new key? Would I still be able to update the app and if it's not possible, how can I go about giving information to users about the updated version?
If anybody has had a problem like this or has come across troubles, what advice can you give to help remedy the situation? Fortunately, it is a free app.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(30)
野蛮是你最好的选择!
这是一个帮助我解决问题的脚本:
https://code。 google.com/p/android-keystore-password-recover/wiki/HowTo
您可以选择为其提供密码可能包含的单词列表,以便快速恢复(对我来说它工作时间<1秒)
如果提供了错误的密码,即使只有一次,它会在下次尝试时不断提示:
密钥库被篡改或密码不正确。
即使您提供了正确的信息。我试了好几次了,也许是某种保护。
关闭导出向导并使用正确的密码再次启动它,现在它可以工作了:)
解决方案 2019(Windows、Android Studio 3.3、gradle 4.10):
此解决方案仅在之前标记了“记住密码”复选框的情况下才有效。
首先,taskArtifacts.bin 不适用此版本的 gradle 存在,idea.log 显示密码的星号。这是过去的解决方案,对我不起作用。
我在哪里找到了明文密码:C:\Users\{username}\AndroidStudioProjects\{project}\app\build\intermediates\signing_config\release\out\signing-config.json
密钥:mStorePassword 和 mKeyPassword。
我真的希望它对其他人有帮助。
事实上,丢失密钥库密码
并不是问题。
您可以使用下面的 keytool
命令创建一个新的密钥库并为其设置新密码。您不需要原始密钥库密码:
keytool -importkeystore -srckeystore path/to/keystore/with/forgotten/pw \
-destkeystore path/to/my/new.keystore
出现提示时,为您的 new.keystore
和源密钥库密码(您可以使用该密码)创建密码丢失)只需按Enter即可。
您将收到有关未检查完整性的警告,并且您将获得与原始密钥库相同的新设置的密码。
这样做的原因是密钥库密码
仅用于提供密钥库
的完整性,与私钥相反,它不会用它加密数据密码
,它实际上使您的私钥保持加密状态。
请注意,您必须知道您的私钥密码
才能对您的应用进行签名。好吧,如果它与忘记的密钥库密码
相同,那么您可以像@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 行
希望能帮助别人!
获取密钥库密码的最简单方法
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}
希望对您有所帮助。
更新日期:2022 年 9 月
它不适用于最新版本
幸运的是,我从 Android studio 日志中找到了丢失的密码以及密钥库路径和别名。
如果您运行的是基于 linux / Unix 的机器。
请导航到其中的 Library Logs 目录
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 用户有所帮助
在花了将近一天的时间研究在 Android Studio 中恢复丢失的密钥库密码的可能选项之后。我发现了以下 4 种可能的方法:
使用 AndroidKeystoreBrute找回您的密码。当您部分忘记密码并且您的脑海中仍然有一些密码提示时,此方法非常有用。
如果您之前使用同一台计算机发布了该应用程序(您找到了密钥库密码),您也可以通过 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 版本相同的版本签署了应用程序,您将看到密码。您还可以通过项目的.gradle目录找回密码。寻找以下路径
<块引用>
project_directory/.gradle/2.4/taskArtifacts/taskArtifacts.bin。
注意:这似乎不适用于较新版本的 Gradle(2.10 及更高版本)。
如果上述解决方案均不起作用,那么您可以尝试此解决方案,但对于此解决方案,您还必须有 Android Studio IDE 应用程序或它的首选项,其中您的项目密钥库密码已提前保存(在签署应用程序时使用“记住密码”选项)。您可以从以下路径获取 IDE 首选项:
Mac OSX
<块引用>
~/Library/Logs/AndroidStudio/idea.log.1
Linux(可能的位置)
<块引用>
/home/用户名/AndroidStudio
Windows(可能的位置)
<块引用>
c:\user\用户名\.AndroidStudio
如果您有旧版 Android Studio IDE,则只需使用旧版 Android Studio IDE,或者将旧版 IDE 的首选项导入到新版 IDE 中,并将密钥库文件放在您上次签名并保存密码时所在的路径中。
通过这种方式,一旦您打开项目并尝试“构建”->“生成签名 APK”并从旧位置选择密钥库文件。它将自动检索密码并继续生成签名的APK以供发布。
成功生成发布 APK 后,您可以按照前面提到的选项 2 从日志文件中检查最近生成的发布 APK 的密码。
对于其他可能遇到此问题的人,我想分享一个可能适合您或浏览本文的其他人(例如我自己)的答案。
我正在使用 Eclipse 并在其中为 1.0 版本创建了我的密钥库。快进 3 个月了,我想更新到 1.1。当我在 Eclipse 中选择 Export... 并选择该密钥库时,我记得的所有密码都不起作用。每次它都会说“密钥库被篡改或密码不正确。”它已经到了我准备在其上运行暴力程序的程度,只要我能忍受(一周左右) )尝试让它发挥作用。
幸运的是,我在 Eclipse 之外签署了未签名的 .apk 文件。瞧 - 它成功了!我的密码一直都是正确的! 我不知道为什么,但是即使我的密码正确,通过“导出”菜单在 Eclipse 中签名也会报告错误。
因此,如果您收到此错误,请执行以下步骤(采取的步骤)来自 Android 文档),帮助您为您的 apk 做好准备市场。
注意:要从 Eclipse 获取未签名的 apk:右键单击项目 >安卓工具>导出未签名的应用程序
使用密钥库签署未签名的 apk 文件
a.打开管理员cmd提示符并转到“c:\Program Files\Java\jdk1.6.0_25\bin”或您拥有的任何版本的java(您已在其中复制了未签名的apk文件和密钥库)
b.在 cmd 提示符下,将密钥库文件和未签名的 apk 放在同一目录中,键入以下命令:jarsigner -keystore mykeystorename.keystore -verbose unsigned.apk myaliasnamefromkeystore
c.它会说:“输入密钥库的密码:”。输入它并按回车键。
d. ===>成功看起来像这样:
添加:META-INF/MANIFEST.MF ... 签名:classes.dex
e.未签名的版本会被就地覆盖,因此您的签名 apk 文件现在与未签名的文件具有相同的文件名
使用 ZipAlign 压缩签名的 apk 文件以便在市场上分发
a.打开管理命令提示符并转到“c:\AndroidSDK\tools”或安装 Android SDK 的任何位置
b.输入此命令:zipalign -v 4signed.apksignedaligned.apk
c. ===>成功看起来像这样:
验证signedaligned.apk的对齐方式(4) 50 META-INF/MANIFEST.MF(确定 - 压缩) ... 1047129classes.dex(正常 - 压缩) 验证成功
d.签名和对齐的文件位于signedaligned.apk(您在上一个命令中指定的文件名)
========>准备提交到市场
令我惊讶的是没有人提到这一点,但您可以访问 Google Play 开发者支持,他们将与您一起创建新的上传密钥:
https://support.google.com/googleplay/android-developer/contact/otherbugs
我填写了一个问题,他们在 1 天内与我联系。
更新:按照他们的电子邮件说明后,我能够创建一个新的上传密钥,并在几天后启用!问题解决了。
我立刻也遇到了同样的问题。
尽管通过 Google Play 进行应用程序签名,丢失密钥库或其密码并不像以前那样是大问题,但作为开发人员,我们仍然更愿意更改其密码并使用生成的密钥库文件,而无需等待几天谷歌来处理它。
(要通过 Google 处理此问题,请使用此链接提出请求)
要我们自己处理这个问题,
首先从此链接下载两个.java文件。
然后通过javac ChangePassword.java
命令编译ChangePassword.java。
然后,您可以
java ChangePassword <oldKeystoreFileName.keystore> <newKeystoreFileName.keystore>
使用当前密钥库文件的路径/名称运行 Change oldKeystoreFileName.keystore ,并使用新生成的新密钥库文件的路径/名称运行 newKeystoreFileName.keystore 。
这将促进您
输入密钥库密码:
。只需输入您喜欢的任何内容即可:) 无需输入丢失的原始密码。然后输入带 * 的新密码
新密钥库密码:
- 瞧,就是这样。这不会更改您的密钥库的校验和,也不会在应用签名或上传到 play.google 事件时出现任何问题。
如果您能够从 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 你的 <.keystore 文件路径>
例如 keytool -list -v -keystore 。 /app/my-app-key.keystore。
它会要求您输入密钥库密码:只需在此处按 Enter 键即可。您将能够找到映射到别名的名称:
然后,运行 grep -rn "
在你的终端中,你将能够看到你的signing.json文件,如下所示:
./app/build/intermediates/signing_config/release/out/signing-config.json
该文件将包含你的json格式的密码,密钥为“mKeyPassword”:“<你的密码>”
解决方案 2018:如果您缺少密码或 jks 文件,请使用新的密钥库文件对应用进行签名。
1) 使用命令行(不是 android studio 构建菜单)创建新的 keystore.jks 文件
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/其他错误
4) 12-48h 您的新密钥库已启用。使用使用新密钥库签名的新 apk 在 Playstore 上更新您的应用程序:D
有一种方法可以重置您的密码。
转到此链接,描述您的问题(忘记密钥库密码)并生成令牌。
https://support.google.com/googleplay/android-developer/contact/ otherbugs
如果您幸运的话,您将在 1 小时内获得重播。 (一般情况下最多需要2天)。
您将需要生成一个新密钥和 upload_certificate.pem 并将其发送到 google 进行重置。我们将通过邮件向您提供说明。
要生成 upload_certificate.pem,请转到 android studio 终端并输入:
keytool -export -rfc -alias upload -file upload_certificate.pem -keystore keystore.jks
今天2/2/2021,我可以在文件名“executionHistory.bin”中找到我的密码。
让你用notepad++打开并搜索关键keyPassword。请参阅下面的附图。
无需使用暴力破解,简单的方法就是找到您的纯文本密码。
goto:
C:\Users\<your username>\AndroidStudioProjects\WhatsAppDP\.gradle\2.2.1\taskArtifacts
打开:
taskArtifacts.bin
当您打开taskArtifacts.bin时,它可能看起来是加密的,不必担心多次搜索“.keyPassword”。然后您将找到纯文本形式的密码。它可能类似于:
signingConfig.keyPassword¬í t <your password>Æù
希望这有帮助。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我自己就遇到了这个问题 - 幸运的是我能够在 Gradle 的一些临时文件中找到密码。以防万一有人登陆这里:
尝试查找此文件
并搜索
它以明文形式存在。一般来说,如果您至少记住了密码的一部分,请尝试搜索包含此子字符串的文件,希望您能找到一些东西。
想把它扔在这里,也许它最终会对某人有所帮助。
编辑: 从评论中添加了新的见解,只是为了更加明显。
编辑 2: 添加了评论中报告的更多位置。
感谢 Vivek Bansal、Amar Ilindra 和 Uzbekjon 提供的这些信息。
Just encountered this problem myself - luckily I was able to find the password in some Gradle's temporary file. Just in case anyone lands here:
try looking for this file
and search for
It was there in cleartext. In general, if you do remember at least a part of your password, try searching for a file containing this substring and hopefully you will fish out something.
Wanted to throw it out here, maybe it will eventually help someone.
Edit: Added new insight from comments, just to be more visible.
Edit 2: Added some more locations reported in comments.
Thanks to Vivek Bansal, Amar Ilindra and Uzbekjon for these.