Получить SHA256 из подписанного Keystore в приложении для Android Программно [дублировать]

Кажется, что это работает: /(\{(?:\{.*\}|[^\{])*\})/m

279
задан Malthan 15 October 2012 в 11:46
поделиться

6 ответов

Вы можете запустить следующую команду, чтобы отобразить содержимое файла хранилища ключей (и псевдонима):

keytool -v -list -keystore .keystore

Если вы ищете определенный псевдоним, вы также можете указать его в команде :

keytool -list -keystore .keystore -alias foo

Если псевдоним не найден, в нем будет отображаться исключение:

ошибка keytool: java.lang.Exception: псевдоним не существует

468
ответ дан Steven Mark Ford 21 August 2018 в 06:56
поделиться
  • 1
    Привет, я могу отобразить пароль псевдонима ключа. Если я знаю имя псевдонима ключа и имею кейсторный сертификат и пароль хранилища ключей – Prateek 22 August 2013 в 08:22
  • 2
    @prateek Вы не можете. Не было бы особого смысла иметь ключи хранилища ключей или ключевые пароли, если бы вы могли просто отобразить его с помощью средства командной строки. – user207421 17 April 2015 в 12:15
  • 3
    Вы можете запустить следующую команду, чтобы перечислить содержимое файла хранилища ключей: keytool -list -keystore .keystore Вышеупомянутый коммонд не предоставляет имя псевдонима – Manmohan Soni 12 January 2018 в 08:52
  • 4
    @ManmohanSoni Я обновил его, чтобы включить аргумент -v, который показывает псевдоним – Steven Mark Ford 22 March 2018 в 06:18
  • 5
    Я думаю, что /path/to/keystore вместо .keystore будет более понятным для читателя. В любом случае, это правильный ответ! – Andrea Romagnoli 11 July 2018 в 14:09

Вы можете запускать из Java-кода.

try {

        File file = new File(keystore location);
        is = new FileInputStream(file);
        KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
        String password = "password";
        keystore.load(is, password.toCharArray());


        Enumeration enumeration = keystore.aliases();
        while(enumeration.hasMoreElements()) {
            String alias = (String)enumeration.nextElement();
            System.out.println("alias name: " + alias);
            Certificate certificate = keystore.getCertificate(alias);
            System.out.println(certificate.toString());

        }

    } catch (java.security.cert.CertificateException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (KeyStoreException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if(null != is)
            try {
                is.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

Класс сертификата содержит всю информацию о хранилище ключей.

UPDATE-OBTAIN PRIVATE KEY

Key key = keyStore.getKey(alias, password.toCharArray());
String encodedKey = new Base64Encoder().encode(key.getEncoded());
System.out.println("key ? " + encodedKey);

@prateek Надеюсь, это то, что вы ищете!

51
ответ дан Renjith 21 August 2018 в 06:56
поделиться
  • 1
    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.security.cert.Certificate; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.util.Enumeration; – ban-geoengineering 6 August 2013 в 17:33
  • 2
    @Renjith hello В этом коде отображаются все, кроме пароля, связанного с псевдонимом, как его отобразить. пожалуйста, помогите мне – Prateek 22 August 2013 в 09:52
  • 3
    @prateek Проверьте отредактированный ответ! – Renjith 22 August 2013 в 12:55
  • 4
    вы должны использовать фрагмент кода внутри вышеупомянутого цикла while – Renjith 22 August 2013 в 13:00
  • 5
    У меня не было класса Base64Encoder. Не могли бы вы рассказать мне, какой файл jar у него есть? или это файл .java? – Jack 16 March 2016 в 07:35

В этом списке будут указаны все сертификаты:

keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"
4
ответ дан SkillFull 21 August 2018 в 06:56
поделиться

В bash-подобной среде вы можете использовать:

keytool -list -v -keystore cacerts.jks | grep 'Alias name:' | grep -i foo

Эта команда состоит из 3 частей. Как указано выше, первая часть будет перечислять все доверенные сертификаты со всеми подробностями, поэтому вторая часть предназначена для фильтрации только информации о псевдонимах среди этих деталей. И, наконец, в третьей части вы можете найти конкретный псевдоним (или его часть). -i включает режим, нечувствительный к регистру. Таким образом, данная команда даст все псевдонимы, содержащие шаблон «foo», т. Е. foo, 123_FOO, fooBar и т. д. Для получения дополнительной информации man grep.

13
ответ дан Svetoslav 21 August 2018 в 06:56
поделиться

Чтобы получить все детали, мне пришлось добавить опцию -v для ответа romaintaz:

keytool -v -list -keystore <FileName>.keystore
212
ответ дан Waqas Raja 21 August 2018 в 06:56
поделиться

KeyStore Explorer визуальный инструмент с открытым исходным кодом для управления хранилищами ключей.

50
ответ дан Ycnannamela 21 August 2018 в 06:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: