PAYATHON 2026

pepk.jar 报 BadPaddingException,如何排查 Play App Signing 注册失败?

数据小许

结论

从异常链来看,错误发生在 pepk.jar 读取并解密 PKCS12 密钥库时。Given final block not properly padded 通常说明解密所用的密码或密钥材料与密钥库内容不匹配。单凭这段日志无法确定具体原因。由于错误出现在导出和加密私钥的阶段,建议先核对密钥库、alias 和密码,再检查 encryption_public_key.pem 或 --rsa-aes-encryption。

先核对密钥库和密码

Gradle 能签署 .aab,说明 Gradle 配置中的密钥和密码适用于该签署流程,但不能据此确认传给 pepk.jar 的 --keystore-pass、--key-pass、密钥库路径和 alias 都完全一致。JKS 和 PKCS12 密钥库也可能分别使用不同的密钥库密码和私钥密码。

先确认 Java 能否使用指定密码读取 new_keystore.p12,以及文件中是否有 key0:

keytool -list -v \
  -storetype PKCS12 \
  -keystore new_keystore.p12

命令会提示输入密钥库密码。确认条目类型为 PrivateKeyEntry,并记下实际 alias。如果读取失败,先检查密钥库文件或密码;如果读取成功,再确认 pepk.jar 使用的 alias 与列表中的完全一致,并分别核实密钥库密码和私钥密码。不要在公开帖子或日志中粘贴真实密码。

检查传入的密码参数

示例中的 YOUR_PASSWORD 是占位文本,运行时需要替换为实际密码。还要确认当前版本的 pepk.jar 对 pass: 参数的用法与命令行格式一致,并检查 shell 特殊字符、空格或引号是否造成参数拆分或改写。可以用临时的、没有特殊字符的密码创建测试密钥库,判断问题是否与密码字符或命令行传参有关。不要因此更改或覆盖原始签名密钥。

如果 keytool -list 能读取 PKCS12,但 pepk.jar 仍报同一错误,可以用原始密钥库另行生成临时副本进行对照,并分别提供实际的密钥库密码和私钥密码。不要直接覆盖原文件。现有材料不足以判断 OpenSSL 生成的 PKCS12 是否与 pepk.jar 不兼容,也不能据此认定问题由 2048-bit RSA 密钥导致。

再核对 pepk.jar 参数

确认 --keystore 指向预期文件,--alias 对应该文件中的私钥条目 alias,--encryption-key-path 指向 Play Console 提供的公钥文件。确认密钥库和密码无误后,可以从 Play Console 重新下载当前应用对应的 pepk.jar 和公钥,再按照 Console 显示的参数运行。更换公钥不能修复密钥库读取阶段的密码或解密错误,但可以排除公钥与应用不匹配等后续问题。

关于替代方式

现有信息没有提供经过验证的替代工具,也无法确认 Play App Signing 注册能否绕过 pepk.jar 完成。不要使用未经文档支持的自制 Python 脚本生成 .pepk 文件,加密结果必须符合 Play Console 的要求。如果确认 Java 能正常读取密钥库,密码和 alias 也正确,但使用 Console 当前提供的文件仍然失败,请保留脱敏后的完整命令、JDK 版本和错误堆栈,并联系 Google Play Console 支持,询问适用于该应用的官方注册处理方式。

备注:内容仅供参考。