最近需要使用AndroidStudio生成Android打包签名密钥,在填写完毕信息后,得到了这样一个提示:
pkcs12 密钥库不支持其他存储和密钥口令,正在忽略用户指定的-keypass
接着又报了个错误,但是密钥文件却成功生成了,于是便没有在意这个问题。 直到我拿这个生成的密钥去签名的时候,问题出现了:
Given final block not properly padded...
试了各种姿势,排除了我自己了解到的各种可能性,最终发现其实问题原因就在最开始的错误提示里了。
AndroidStudio创建密钥的引导窗口是按照jks格式的创建模板提供的表单,但实际我们创建出来的文件是p12格式的(具体原因不明),而p12只有storepass属性,没有keypass,因此我们填入的keypass将不会生效,签名的时候也会无法正常按照我们创建时填写的keypass来读取我们的密钥。
既然知道了问题原因,那么要解决这个问题就简单了,做下转换即可!
1. 首先保险起见,先把我们生成的签名文件转换为标准的p12格式
keytool -importkeystore -srckeystore $JKS_FILENAME -destkeystore $P12_FILENAME -srcstoretype JKS -deststoretype PKCS12 -srcalias $KEY_ALIAS -destalias $KEY_ALIAS -deststorepass $STORE_PWD
2. 然后再把这个p12转换回我们需要的jks格式
keytool -importkeystore -srckeystore $P12_FILENAME -destkeystore $JKS_FILENAME -srcstoretype PKCS12 -deststoretype JKS -srcalias $KEY_ALIAS -destalias $KEY_ALIAS -deststorepass $STORE_PWD -destkeypass $KEY_PWD