Android keystore踩坑记录

最近又在折腾我之前的Android项目了,再次重写,使用不同的控件,由浅入深,尝试转向开发岗[1]

关于在百度地图上踩的keystore的坑以及解决方案,都在这里一并记录。希望可以节省你的时间。

关于我练手项目的尝试经历,可以查看相关标签中关于地图与音乐的文章:Android开发

场景:2020年7月,我创建过一个Keystore,今日通过如下命令[2]创建keystore,发生错误。

以下的解决方案,其中部分整合了参考链接中的内容与相应软件的命令,我在此对原作者表示感谢。

报错

密钥库不存在

Android的终端输入:keytool -list -v -keystore debug.keystore

提示:密钥库不存在,但在Mac路径〜/.android/debug.keystore中,有debug.keystore文件。

解决方案

在终端使用如下命令重建keystore:

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000

重建文件,则百度地图后台需要再次提交。

keystore password was incorrect

Execution failed for task ‘:app:packageDebug’.

A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable
com.android.ide.common.signing.KeytoolException: Failed to read key AndroidDebugKey from store “/Users/felixxiong/.android/debug.keyst··ore”: keystore password was incorrect

Cause: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.

原因:keystore密码错误

场景:在Mac路径〜/.android/debug.keystore中,有debug.keystore文件,在Android运行时签名报错。

解决方案

使用以下三个命令可修改keystore参数(其中my.keystore为复制后的新keystore):

修改密码:keytool -storepasswd -keystore android.keystore

修改别名alias:keytool -changealias -keystore android.keystore -alias my_name -destalias androiddebugkey

修改alias密码:keytool -keypasswd -keystore my.keystore -alias androiddebugkey

keystore的种类

目前发现,keystore有PKCS12与SHA256withRSA两种。

如果 -storetype 为 PKCS12

尝试修改密码,继续报错:

keytool 错误: java.lang.UnsupportedOperationException: 如果 -storetype 为 PKCS12, 则不支持 -keypasswd 命令

如果 -storetype 为 SHA256withRSA

此处我通过Android Studio - Build - Generate Singed -Bundle / APK创建的keystore。

Warning:JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore debug.keystore -destkeystore debug.keystore -deststoretype pkcs12” 迁移到行业标准格式 PKCS12。

便于复制的命令:

keytool -importkeystore -srckeystore debug.keystore -destkeystore debug.keystore -deststoretype pkcs12

此处经测试,当keystore的type为SHA256withRSA时,可以使用上述三个命令。

找回key相关
日志找回

如果你使用AS生成过,则可通过log方式查看。

Windows:C:\Users\UserName(当前系统的用户名),AndroidStudioX.X > system > log-idea.log-injected.signing.store

Mac:Terminal- ~/Library/Logs -> AndroidStudioBeta ->idea.log.1 (or any old log number)-injected.signing.store

使用软件破解密码
  1. 下载Android-keystore-password-recover,获得jar包,放置在桌面。

  2. 创建你所熟悉的密码词表,以txt格式结尾,放置在桌面。

  3. 使用字典破解或智能破解方式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 字典破解
    java -jar Android_Keystore_Password_Recover_1.07.jar -m 2 -k "C:\\mykeystore.keystore" -d "passlib.txt"

    #智能破解
    java -jar Android_Keystore_Password_Recover_1.07.jar -m 3 -k "C:\\mykeystore.keystore" -d "passlib.txt"

    # Android_Keystore_Password_Recover_1.07.jar 为软件名称
    # "C:\\mykeystore.keystore"为keystore路径
    # "passlib.txt"为你所熟悉的密码词表的txt文档的名称
报错

Exception in thread “main” java.io.FileNotFoundException: Users/felixxiong/Desktop/mykeystore.keystore (No such file or directory)

可能是Mac的文件编写路径错误。

文件在桌面的终端路径写法为:Users/youraccountname/Desktop/xxx.keystore

java.io.IOException: not a JavaKeyStore

后续更新。

如果你有解决方案,欢迎在评论里留言~


参考链接:

关于Android Studio打包出现错误

[TUT] Change alias passwords of your Android Keystore

Android 找回签名证书Key Alias 和 Key Password



  1. 这个话我想了很多次了,但这一次我非技术(Android)不做。 ↩︎

  2. 可通过终端或Android Studio终端输入命令 ↩︎

FelixXiong wechat
产品北里,讲述产品和人性、涉及设计、技术和运营的公众号。
你们的赞赏是我更新的动力~