如何从现有指纹开始创建密钥库?

How can I create a keystore starting from an existing fingerprint?

我想在 Playstore 中上传我的应用程序,它将替换我过去没有自己加载的旧版本。当我尝试上传我的应用程序时出现以下错误:

You uploaded an APK that is signed with a certificate other than that
of your previous APK. You must use the same certificate. 
The APK existing certificates are signed by these fingerprint:
[SHA1: .... ]

The certificates used to sign the APK that you have loaded these fingerprint:
[SHA1: .... ]

如何获得具有正确指纹的密钥库?

How can I get the keystore having the correct fingerprint?

Google Play 依靠密钥的连续性来确保发布该应用的开发者与更新该应用的开发者相同。

您应该在您的计算机上安装相同的 public/private 密钥,然后使用私钥对 APK 进行签名。最后,将 APK 重新提交到 Play 商店。


How can I create a keystore starting from an existing fingerprint?

你不能。您需要原始的 public/private 密钥对。

可以从现有 APK 中获取 public 密钥。只需查看 META-INF 目录。证书或 public 密钥位于其中。

但是,你必须分解RSA public密钥才能恢复私钥(或解决相关问题,就像有限域中的离散根)。它非常重要,如果你这样做了,你就不会关心签署 APKs :)。例如,参见 Crypto Stack Exchange 上的 Calculating private keys in the RSA cryptosystem


以下是使用 jarsigner 和调试密钥从命令行进行签名的方法。参数的顺序很重要。您应该使用真正的 public/private 密钥对,而不是调试密钥。

jarsigner -verbose -keystore C:\Users\<user>\.android\debug.keystore \
    -storepass android -keypass android -digestalg SHA1 \
    -sigalg SHA1withRSA <package name>.apk androiddebugkey