【问题标题】:Generate a signed apk - Get Key failed: Given final block not properly padded生成签名的 apk - 获取密钥失败:给定最终块未正确填充
【发布时间】:2019-06-26 22:07:22
【问题描述】:

我正在尝试在 Google Play 上发布我的第一个应用,但遇到了困难。 让我向您解释我的问题: 我的应用程序编译,我想生成一个签名的 apk... 这不适用于 android studio (Build--> generate signed budle/apk),我收到了下一条错误消息:

erreur keytool : java.io.FileNotFoundException: C:\Users\sebla\Desktop\AndroidApp\jdk-11.0.1\bin\mykeystore.jks (Accès refusé)

然后,我成功创建了密钥库(通过 cmd):
C:\Users\sebla\Desktop\AndroidApp\jdk-11.0.1\bin>keytool -genkey -v -keystore appkeystore.keystore -alias permisKey -keyalg RSA -keysize 2048 -validity 10000

但现在我在生成签名的 apk 时收到以下错误消息:

Something went wrong with the encryption tool: Get Key failed: Given final block not properly padded
java.security.UnrecoverableKeyException: Get Key failed: Given final block not properly padded
    at sun.security.pkcs12.PKCS12KeyStore.engineGetKey(PKCS12KeyStore.java:410)
    at sun.security.provider.KeyStoreDelegator.engineGetKey(KeyStoreDelegator.java:96)
    at sun.security.provider.JavaKeyStore$DualFormatJKS.engineGetKey(JavaKeyStore.java:70)
    at java.security.KeyStore.getKey(KeyStore.java:1023)
    at com.google.wireless.android.vending.developer.signing.tools.extern.export.KeystoreHelper.extractPrivateKey(KeystoreHelper.java:56)
    at com.google.wireless.android.vending.developer.signing.tools.extern.export.KeystoreHelper.getPrivateKey(KeystoreHelper.java:35)
    at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.run(ExportEncryptedPrivateKeyTool.java:98)
    at org.jetbrains.android.exportSignedPackage.ExportSignedPackageWizard$2.run(ExportSignedPackageWizard.java:241)
    at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:750)
    at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:157)
    at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:580)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:525)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:85)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:144)
    at com.intellij.openapi.progress.impl.CoreProgressManager$4.run(CoreProgressManager.java:395)
    at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:305)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:989)
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:845)
    at com.sun.crypto.provider.PKCS12PBECipherCore.implDoFinal(PKCS12PBECipherCore.java:399)
    at com.sun.crypto.provider.PKCS12PBECipherCore$PBEWithSHA1AndDESede.engineDoFinal(PKCS12PBECipherCore.java:431)
    at javax.crypto.Cipher.doFinal(Cipher.java:2165)
    at sun.security.pkcs12.PKCS12KeyStore.engineGetKey(PKCS12KeyStore.java:348)
    ... 20 more
------------------------------------

非常感谢一些帮助,因为我完全迷失了并且无法发布我的应用程序感到沮丧。 我是否有任何代码可以在 manifest 或 gradle 中实现以消除该错误?

【问题讨论】:

  • 感谢您的帮助,但这不是重复的,因为我没有编写任何与加密相关的代码。我只是想从 Android Studio 生成一个签名的 apk
  • 您可以从 Android Studio 创建新的密钥库。 stackoverflow.com/a/29621643/6168272。使用此密钥库并将应用发布到 Play 商店后,请将其保存在安全的地方。
  • Ranjan,我尝试过这种方式,但出现以下错误:erreur keytool : java.io.FileNotFoundException: C:\Users\sebla\Desktop\AndroidApp\jdk-11.0.1\bin\appkeystore .keystore(访问被拒绝)
  • 一些事情。 (a) 看起来您正在使用非常奇怪的地方来放置您的 keystore.propertiesmykeystore.jks 文件。 (b) 您的编译器似乎还需要一个 PKCS12-type 密钥库,而 Android Studio 通常使用另一个默认值。 (我知道新的 gradle 对此抱怨,告诉你转换为 pkcs12,但是当我这样做时,我也遇到了奇怪的错误。(c)尝试关注我的 instructions here

标签: java android


【解决方案1】:

generating a keystore 并使用Codemagic 签名和发布APK 之后,我收到了相同的错误消息。

我的问题是生成密钥库的命令只要求输入密钥库的密码,然后将其应用于密钥。我发现这是显式打开密钥库并使用Keystore explorer 解锁密钥。

仔细检查 (1) 您的密钥密码是否正确(不仅仅是密钥库密码)以及 (2) gradle 正在正确使用您的密钥密码进行编码。

【讨论】:

  • 这是一个很棒的资源!使用 Keystore explorer,我发现不知何故我交换了哪个密码用于存储,哪个密码用于密钥。
猜你喜欢
  • 2014-01-22
  • 2013-12-02
  • 1970-01-01
  • 2011-12-24
  • 2015-05-22
  • 2015-03-28
  • 1970-01-01
  • 2011-05-16
  • 2015-07-01
相关资源
最近更新 更多