如何从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个回答

1

1
Paul Crinigan所建议这里,您可以通过运行以下命令获取MD5哈希值:

keytool -exportcert -v -alias keystore_alias -keystore "path\to\keystore\my.keystore" | openssl dgst -md5

其中:

  • keystore_alias 是您的密钥库别名(如果有)。
  • path\to\keystore\my.keystore 是您的密钥库文件路径。

运行命令后,如果您设置了密钥库密码,则会要求您输入密码。输出将是类似于以下内容的哈希值:

(stdin)= 8a7b562730f9581c2161bf3984e7af5e

MD5 将是输出哈希,每 2 个字符插入冒号 : 符号:

8a:7b:56:27:30:f9:58:1c:21:61:bf:39:84:e7:af:5e


0

大家好,在2023年。

我编写了一段Java代码片段,用于生成和显示相关信息,例如MD5。请随意尝试使用以下代码:

import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.MessageDigest;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.util.Enumeration;

public class KeyStoreInfo {

    public static void main(String[] args) {
        if (args.length != 2) {
            System.err.println("Usage: java KeyStoreInfo <keystore-path> <keystore-password>");
            System.exit(1);
        }

        String keystorePath = args[0];
        String keystorePassword = args[1];

        try {
           
            FileInputStream is = new FileInputStream(keystorePath);
            KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
         
            keystore.load(is, keystorePassword.toCharArray());

            Enumeration<String> enumeration = keystore.aliases();
            while (enumeration.hasMoreElements()) {
                String alias = enumeration.nextElement();
                Certificate certificate = keystore.getCertificate(alias);
                PublicKey publicKey = certificate.getPublicKey();

      
                System.out.println("Alias Name: " + alias);
                System.out.println("Public Key: " + publicKey);

          
                System.out.println("Certificate: " + certificate.toString());

                System.out.println("MD5 Fingerprint: " + getFingerprint(certificate, "MD5"));
                System.out.println("SHA-1 Fingerprint: " + getFingerprint(certificate, "SHA-1"));
                System.out.println("SHA-256 Fingerprint: " + getFingerprint(certificate, "SHA-256"));
                System.out.println("---");
            }

            is.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
   private static String getFingerprint(Certificate certificate, String algorithm) {
      try {
          MessageDigest md = MessageDigest.getInstance(algorithm);
          byte[] publicKey = certificate.getEncoded();
          md.update(publicKey);
          byte[] digest = md.digest();

          StringBuilder hexString = new StringBuilder();
          for (byte b : digest) {
              String hex = Integer.toHexString(0xff & b);
              if (hex.length() == 1) hexString.append('0');
              hexString.append(hex);
              hexString.append(":");  
          }
          hexString.deleteCharAt(hexString.length() - 1);
          return hexString.toString().toUpperCase(); 
      } catch (Exception e) {
          e.printStackTrace();
          return null;
      }
}

}

使用方法:
1. 在命令行中输入以下命令:javac -encoding UTF-8 KeyStoreInfo.java 2. 在命令行中输入以下命令:java KeyStoreInfo your_app.keystore_path your_keystore_password

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