如何从Java的keytool获取MD5指纹而不仅仅是SHA-1?

112

我想在我的应用程序中使用Google地图,因此需要调试证书的MD5指纹。我尝试了以下操作:

(这里我从bin文件夹中的C:\Documents and Settings\Administrator.android目录下复制了debug.keystore文件)

C:\Program Files\Java\jdk1.7.0\bin>keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android

但是得到了以下结果:

androiddebugkey, May 27, 2011, PrivateKeyEntry,Certificate fingerprint (SHA1): "some code"

然而,这并不能获取MAP API密钥。SHA1和MD5是相同的吗?

我该怎么做才能获取MD5证书?

13个回答

195

在安装JDK 1.7后,keytool默认输出SHA1指纹,而非MD5。您可以通过添加-v选项来获取MD5证书。

使用以下代码:

C:\Program Files\Java\jdk1.7.0\bin>keytool -v -list -alias
androiddebugkey -keystore debug.keystore -storepass android -keypass android

它还将输出MD5证书。


7
谢谢,-v选项对我有用。 - Joseph Earl
现在MD5和sha1的处理方式已经改变了,谷歌要求我们在获取MD5后,需要从Google API控制台获取API密钥。感谢大家。 - Crishnan Kandada
@Ankit-Saxena - 你能回答一下这个问题吗?https://stackoverflow.com/questions/55336382/md5-missing-from-keytool-command-when-fired-for-apk/-v选项对我不起作用。 - node_analyser
5
这个答案已经过时了,对于 JDK 8 及更新版本,"-v"选项不再打印 MD5 详情请见 - Alexander Farber

27

要获取MD5值和SHA1...等等,请按照以下步骤操作:

在此之前,不要忘记将debug.keystore复制到一个名为Androidkeystore的文件夹中,例如创建在C驱动器中。

C:\Program Files\Java\jdk1.7.0_05\bin>keytool -v -list -keystore C:\Androidkeyst
ore\debug.keystore

这里要求输入密钥库密码:android

然后你需要输入MD5、SHA1等信息。

Keystore type: JKS
Keystore provider: SUN

Your keystore contains ? entry

Alias name: androiddebugkey
Creation date: ?? ???, ????
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[?]:
Owner: CN=Android Debug, O=Android, C=US
Issuer: CN=Android Debug, O=Android, C=US
Serial number: 67b6344b
Valid from: Mon Jun 18 20:33:56 IST 2012 until: Wed Jun 11 20:33:56 IST 2042
Certificate fingerprints:
         MD5:  C2:61:51:3E:BC:C8:0C:DB:75:B6:E7:C4:90:AD:91:39
         SHA1: CD:5E:8A:0F:4E:0F:2E:FD:92:5E:5E:4R:CF:F8:44:33:2C:8C:B8:97
         SHA256: B5:BF:75:60:DB:62:09:49:F1:38:CH:49:18:22:18:95:03:C9:5C:14:F6:
B0:F4:21:D2:19:B8:FF:38:D2:B9:FD
         Signature algorithm name: SHA256withRSA

注意:如果目录路径中有任何空格,必须用引号将其括起来。例如,使用以下格式:

-keystore "C:\Users\Your Name\.android\debug.keystore"


3
这个回答更好,并且对我有所帮助,因此请不要阻止任何人提供具有不同信息的替代答案。感谢K.krishnan提供这个答案+1。 - Onimusha

17

你好,这是2021年的问候。

JDK 8及更高版本的keytool工具不再打印MD5了,即使您尝试将“keygen -list”命令的“-v”选项添加到其中。

我猜MD5已经不再被认为足够安全,已被移除

与此同时,仍有像亚马逊“安全配置文件管理”之类的地方需要您提交证书的MD5签名。

以下是一个命令,可以提供它(使用“android”作为Android Studio密钥库的密码):

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中):

git bash screenshot


7
如果您正在使用JDK 7:
请使用-v选项。

1
请注意这个问题被提出的日期。除非您认为有更好的答案,否则不要回答旧问题。 - Riking
我只是这样做是因为它解决了我的问题。而我现在才遇到这个问题。 我只是想留下一些东西,如果有人现在遇到同样的问题。顺便说一句,谢谢那个减去2分的人。:( - fjs

6

获取 SHA 1,MD 5 最简单的方法是在 Android Studio 屏幕右上角附近的 Gradle 上点击。然后点击应用程序名称(例如 android123(root): 它应该会显示为这样)。之后,您将找到一个名为 android 的 子文件夹,点击它并进入 signingReport。它应该在控制台中运行,并显示 SHA 1, MD 5。希望这能帮到您。


谢谢!所有其他答案对我都不起作用,但这个可以。 - Yuri Reis
2
这可以简化为运行 ./gradle signingReport - dragon788

4

keytool之后、-list之前添加-v

keytool -v -list

3
-v 标志可以同时提供 SHA1 认证。如果没有使用该标志,只会得到 MD5 指纹。

3

将 ' debug.keystore ' 文件复制到 c:\ 或其他文件夹。

尝试进入 c:\Program Files\Java\jdk1.6.25\bin 文件夹并输入以下内容:

c:\Program Files\Java\jdk1.6.25\bin>keytool -list -keystore c:\debug.keystore

密码为 'android'。


2

我通过打开命令提示符(管理员)并输入以下命令来解决了Windows 8的问题:

C:\Program Files (x86)\Java\jre7\bin>keytool -v -list -keystore C:\<Your Path>\<Your Keystore>

之后,只需前往https://code.google.com/apis/console/

由于他们更改了新的界面,您需要在左侧导航栏中选择API与身份验证选项卡,然后进入已注册应用程序,选择您现有的API密钥以替换它或创建一个新的API密钥,并使用先前生成的SHA1代码。

这就是我使其正常工作的方法。


1

只需在Eclipse中使用您的密钥库导出项目,在最后一步中,您将获得SHA-1和MD-5。

enter image description here

请查看 这个问题 获取更多细节。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接