MD5:Java 7 及更高版本中 keytool.exe 的输出差异

Posted

技术标签:

【中文标题】MD5:Java 7 及更高版本中 keytool.exe 的输出差异【英文标题】:MD5: Difference in output of keytool.exe in Java 7 and above 【发布时间】:2018-09-27 12:14:58 【问题描述】:

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

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,我无法使用 keytools 从我选择的任何密钥库中获取 MD5。据说如果我的JRE版本是7的话,可以从keystore获取MD5。

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

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

    在保持安装 v10 的同时,我仍然可以使用 JRE/JDK v7 的功能吗?通过什么方式,我可以在 Window 7(即我的操作系统)的 Java 控制面板中指定我想使用 Java 7。

    我很难获得"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",如下所示。

[编辑(可能的答案)]:这是一些使用密钥库并从 keyStore 中找出 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 字节长。

最好的问候,

你的追随者。

【问题讨论】:

【参考方案1】:

答案肯定在帖子里给出:

How to read SHA and MD5 fingerprint programmatically in Android ?

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

一个。从签名中获取 MD5。

b.从 byteArray[]

获取 MD5

提示:

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

快乐的编码和探索:-)

最好的问候

【讨论】:

以上是关于MD5:Java 7 及更高版本中 keytool.exe 的输出差异的主要内容,如果未能解决你的问题,请参考以下文章

Flyway 7.5.1 及更高版本无法初始化 Zonky-test DB

如何在 Xcode 7 Beta 5 中安装 iOS 7 及更高版本的模拟器?

在 Java 11 及更高版本中使用 HttpClient 时如何跟踪 HTTP 303 状态代码?

app.EnterText() 不会在 XamarinUiTest 中输入要在 Android 7 及更高版本中输入的文本

通过本地数据源领域的 Servlet3 登录在 Tomcat 7.0.29 中有效,但在 7.0.54 及更高版本中失败

我应该怎么做才能使这个菜单栏在 Internet Explorer 7 及更高版本中正常工作?