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 是如何做到这一点的?
所以我正试图找到解决方案,反过来,解决同样的问题。
怎样才能在安装 v10 的同时使用 JRE/JDK v7 的功能?在什么情况下,我可以在Window 7(也就是我的OS)中的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"
后面的段落。
[编辑(可能的答案)]:这是一些使用密钥存储并从密钥存储中找出 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
快乐的编码和探索:-)
此致
我在以下帖子中提出了我的担忧:
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 是如何做到这一点的?
所以我正试图找到解决方案,反过来,解决同样的问题。
怎样才能在安装 v10 的同时使用 JRE/JDK v7 的功能?在什么情况下,我可以在Window 7(也就是我的OS)中的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"
后面的段落。
[编辑(可能的答案)]:这是一些使用密钥存储并从密钥存储中找出 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
快乐的编码和探索:-)
此致