MD5: keytool.exe in Java 7及以上的输出差异

MD5: Difference in output of keytool.exe in Java 7 and above

我在以下帖子中提出了我的担忧:

how i can get MD5 hash in jdk.7.o?

并看到像这样的主题:

Cannot use Java 7 installation if Java 8 is installed

我也研究过:

https://docs.oracle.com/cd/E74665_01/MOSHP/settings.htm#CIHEFHEF

但没用。

因为我使用的是 JRE/JDK 版本 > 10,所以我无法使用密钥工具从我选择的任何密钥库中获取 MD5。据说可以从keystore中获取MD5,如果我的JRE版本是7.

此外,我已经尝试并知道当在 Android Studio 或 Eclipse 中为 Android 的默认密钥库(即开发人员密钥库)发出此命令时,它很容易在那里提供 MD5。所以我也提出了一个问题,当我的 JRE 版本 > 10 时,Android Studio 或 Eclipse 是如何做到这一点的?

所以我正试图找到解决方案,反过来,解决同样的问题。

  1. 怎样才能在安装 v10 的同时使用 JRE/JDK v7 的功能?在什么情况下,我可以在Window 7(也就是我的OS)中的java控制面板中指定我要使用Java 7.

  2. 我很难得到"Support Identifier"信息,对于oracle支持,得到那个版本。所以有人可以指导我如何获得它。

请在本站页面搜索"Java SE 7, and Java SE 6 updates"

https://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

点击超链接后,请在打开的页面中查找 "Support Identifier""My Oracle Support" 后面的段落。

[编辑(可能的答案)]:这是一些使用密钥存储并从密钥存储中找出 SHA 值的 Base64 的代码:

 try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.sample.app", 
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    /*Note: may be instead of converting obtained bytes into Base64, 
I should convert it into hex string.*/
            }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }

如果这意味着答案,请告诉我。 MD5 长度至少应为 32 个字节。

此致,

您的关注者。

肯定在跟帖中给出了答案:

How to read SHA and MD5 fingerprint programmatically in Android ?

在此答案中,@NateZh 使用代码直接获取摘要的 "MD5" 实例而不是 "SHA",同时将 byteArray[] 转换为 HEX 字符串,并提供变体:

一个。从签名中获取 MD5。

b。从 byteArray[]

获取 MD5

提示:

MessageDigest messageDigest = null;
StringBuffer md5StrBuff = new StringBuffer();
try {
messageDigest = MessageDigest.getInstance("MD5");
//... so on

快乐的编码和探索:-)

此致