MD5: разница в выводе keytool.exe в Java 7 и выше

Я высказал свои опасения в следующей теме:

как я могу получить хэш MD5 в jdk.7.o?

и видел такие темы, как:

Невозможно использовать установку Java 7, если установлена ​​Java 8

и я также изучал:

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

но бесполезно.

Поскольку я использую версию JRE/JDK > 10, я не могу получить MD5 из любого хранилища ключей по своему выбору с помощью инструментов для ключей. Говорят, что MD5 можно получить из хранилища ключей, если у меня версия JRE 7.

Кроме того, я пробовал и знаю, что когда эта команда выдается внутри Android Studio или Eclipse для хранилища ключей Android по умолчанию, то есть хранилища ключей разработчиков, она легко дает там MD5. Поэтому я также поднял вопрос о том, как Android Studio или Eclipse могут это сделать, когда моя версия JRE > 10?

Поэтому я пытаюсь найти решение, наоборот, для той же проблемы.

  1. Каким образом я все еще могу использовать функции JRE/JDK v7, пока v10 остается установленным? Каким образом я могу указать в панели управления Java в Windows 7 (это моя ОС), что я хочу использовать Java 7.

  2. Мне трудно получить "Support Identifier" информацию для поддержки оракула, чтобы получить эту версию. Так что кто-то может подсказать мне, как получить это.

Пожалуйста, найдите "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" в следующем абзаце.

[EDIT (для возможного ответа)]: Вот некоторый код, который использует хранилище ключей и находит значение Base64 SHA из keyStore:

 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 байт.

Наилучшие пожелания,

Ваш последователь.


person Abhinav Saxena    schedule 27.09.2018    source источник


Ответы (1)


Наверняка ответ есть в теме:

Как программно прочитать отпечаток SHA и MD5 в Android?

Здесь, в этом ответе, @NateZh использовал код для прямого получения экземпляра Digest «MD5» вместо «SHA» вместе с преобразованием byteArray[] в HEX String, а также предоставлением вариантов:

а. Получение MD5 из подписи.

б. Получение MD5 из byteArray[]

Советы:

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

Удачного кодирования и изучения :-)

Наилучшие пожелания

person Abhinav Saxena    schedule 03.10.2018