如何为Release版本生成MD5密钥哈希?结果有效性及stdin含义咨询
解决MD5哈希获取及相关疑问
1. 为什么keytool和gradle signingReport默认不输出MD5?
从JDK 11开始,keytool默认不再输出MD5摘要(因MD5安全性较弱),Gradle的signingReport任务也继承了JDK的这个行为,所以默认只显示SHA1、SHA256这类更安全的哈希值。
让keytool输出MD5的方法
直接在原命令后添加-digestalg MD5参数即可:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -digestalg MD5
执行后就能看到MD5哈希值。
让gradle signingReport输出MD5的方法
在app模块的build.gradle(或build.gradle.kts)中添加配置,强制输出所有摘要类型:
android { tasks.withType(com.android.build.gradle.tasks.SigningReport) { signingReportOutputType = com.android.build.gradle.internal.tasks.SigningReportTask.OutputType.ALL } }
之后再执行./gradlew signingReport,就能看到MD5、SHA1、SHA256等所有哈希值。
2. openssl命令得到的MD5是否正确?
你使用的命令:
keytool -exportcert -alias myaliasofkeystore -keystore mykeystorefolder/release-keystore | openssl md5
是正确的。这个命令逻辑是先用keytool -exportcert导出证书二进制内容,再通过管道(|)将内容传给openssl md5计算哈希。输出的无冒号字符串就是证书的MD5值,只是默认格式没有分隔符。
如果需要带冒号的标准格式,可用sed命令处理:
keytool -exportcert -alias myaliasofkeystore -keystore mykeystorefolder/release-keystore | openssl md5 | sed 's/\(..\)/\1:/g; s/:$//'
3. 输出中的“stdin”是什么意思?
stdin是**标准输入(Standard Input)**的缩写。因为你用了管道|,前面keytool的输出会作为openssl md5的输入来源,而非从文件读取数据。openssl提示正在从标准输入读取内容计算MD5,这是正常提示,不影响结果正确性。
内容的提问来源于stack exchange,提问作者user21300258
相关产品推荐
相关产品推荐

