Error: Unable to export or encrypt the private key
java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/NONE/OAEPWithSHA1AndMGF1Padding
at java.base/javax.crypto.Cipher.getInstance(Cipher.java:571)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.encryptPrivateKeyWithCkmRsaAesKeyWrapEncryption(ExportEncryptedPrivateKeyTool.java:284)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.run(ExportEncryptedPrivateKeyTool.java:213)
at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.main(ExportEncryptedPrivateKeyTool.java:165)
JDK有两个版本,一个是OracleJDK,另外一个是OpenjDK, 下载OpenJDK_21下来就可以正常执行命令生成zip包了
传送门:OpenJDK JDK 21.0.2 GA Release
配置环境变量
JAVA_HOME=/Users/******/jdk-21.0.1.jdk/Contents/Home
PATH=$JAVA_HOME/bin:$PATH:.
CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export JAVA_HOME
export PATH
export CLASSPATH
在执行命令 java检查版本
java -version
//出现下面的内容代表配置好了
openjdk version "21.0.1" 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-29)
OpenJDK 64-Bit Server VM (build 21.0.1+12-29, mixed mode, sharing)
再重新执行
java -jar pepk.jar --keystore=foo.keystore --alias=foo --output=output.zip --include-cert --rsa-aes-encryption --encryption-key-path=/path/to/encryption_public_key.pem
--keystore=foo.keystore:指定密钥库文件的路径和名称。密钥库文件通常包含用于对应用进行数字签名和身份验证的密钥和证书。
--alias=foo:指定密钥库中要使用的密钥的别名。一个密钥库可以包含多个密钥,通过别名来标识不同的密钥。
--output=output.zip:指定输出文件的路径和名称。在此示例中,输出文件将被命名为output.zip。
--include-cert:包括应用证书到输出文件中。应用证书用于验证应用的身份和完整性。
--rsa-aes-encryption:使用RSA-AES加密算法对输出文件进行加密。RSA-AES是一种常用的加密算法组合,用于保护敏感数据的机密性。
--encryption-key-path=/path/to/encryption_public_key.pem:指定用于加密的公钥文件的路径和名称。公钥用于加密数据,并且只有私钥的持有者才能解密数据。