我需要为我的应用程序获取谷歌地图密钥,为此我需要证书的MD5签名。从互联网上看,我使用“keytool”来获取它:
keytool -list -alias mykey -keystore mykeystore
问题在于答案是SHA1签名而不是MD5签名。
我使用的是JDK 1.7。
我到底做错了什么?
感谢您花费时间帮助我。
你好,这里是2021年。
JDK 8及更新版本的keytool不再打印MD5,即使您尝试将“keygen -list”命令的标准建议添加“-v”选项也无效。
我猜MD5已不再被认为足够安全,并且已被删除。
同时,像亚马逊“LWA等的安全配置管理”之类的地方仍然要求您提交证书的MD5签名。
以下是一个命令,它将提供它(对于Android Studio密钥库,请使用密码“android”):
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | \
openssl dgst -md5
如果您想在其中添加冒号字符,那么请添加以下“sed”命令:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | \
openssl dgst -md5 | \
sed 's/[a-fA-F0-9][a-fA-F0-9]/&:/g; s/:$//'
以上命令适用于Linux、macOS甚至Windows(在git bash中):
关于这个问题还有另一篇帖子:如何从Java的keytool获取MD5指纹,而不仅仅是SHA-1?
我猜JDK 1.7默认使用SHA1。为了解决这个问题,以下方法有效:
C:\Program Files\Java\jdk1.7.0\bin>keytool -v -list -alias
androiddebugkey -keystore debug.keystore -storepass android -keypass android
我尝试了这个方法,对我有效。它会按照顺序提供MD%、SHA1、SHA256和签名算法名称。
keytool -exportcert -alias alias -keypass keypass -keystore ./test.keystore -storepass 123456 | md5sum
你尝试过使用keytool命令吗:
$ keytool -list -keystore ~/.android/debug.keystore
有关获取地图 API 密钥的更多信息,请参见此处:http://code.google.com/android/maps-api-signup.html
由于您正在使用 JDK 1.7,因此其 keytool 工具有一个新的命令行参数,即 -keyalg。
我知道您可以指定 -keyalg RSA,因此也许 -keyalg MD5 可以给您正确的密钥。
通过返回到Java 1.6解决。