Android Keystore Тип, какой мне выбрать? - PullRequest
6 голосов
/ 18 апреля 2011

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

KeyStore store = KeyStore.getInstance("JCEKS");

Но Android, похоже, не знает "JCEKS".

04-18 10:52:17.236: WARN/System.err(474): java.security.KeyStoreException: KeyStore JCEKS implementation not found

Попытка JKS дает ту же ошибку. Какой алгоритм хорош, чтобы использовать его на Android?

Ответы [ 6 ]

10 голосов
/ 03 августа 2011

Android, кажется, использует провайдера bouncycastle.Это поставщик по умолчанию, который возвращает API.Чтобы быть уверенным, какой из них доступен на устройстве по умолчанию, используйте KeyStore.getDefaultType().

В моем случае это вернуло 'BKS'.Также, кажется, есть исключение, когда есть «.»символ в пути к файлу хранилища ключей.

Когда я сохранял хранилище в папке с именем моего пакета (как рекомендовано в документации Android), это приводило к исключению.

Вы можете проверить это также.

4 голосов
/ 19 апреля 2011

Вы загружали хранилище ключей до того, как пытались получить к нему доступ? Сообщение об ошибке появилось прямо в инструкции getInstance?

Кто-то из Google сказал, что "PKCS12" работал на несколько человек, попробуй.

2 голосов
/ 06 июля 2012

Используй это KeyStore keyStore = KeyStore.getInstance("PKCS12");

Создание хранилища ключей с помощью инструмента «KeyTools Explorer»!

2 голосов
/ 20 апреля 2011

Вам нужен магазин ключей для надувных замков (BKS). Взгляните здесь

1 голос
/ 29 января 2016

Это сработало для меня:

KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");

Не забудьте позвонить KeyStore.load(KeyStore.LoadStoreParameter param), прежде чем звонить KeyStore.getEntry (String alias, KeyStore.ProtectionParameter param), т.е.

keyStore.load(null);
KeyStore.Entry keyStoreEntry = keyStore.getEntry(alias, null);
0 голосов
/ 07 июля 2016

Это может помочь:

см. https://github.com/nelenkov/ecdh-kx/blob/master/src/org/nick/ecdhkx/Crypto.java

static public void listAlgorithms( String algFilter ){
    java.security.Provider[] providers = java.security.Security.getProviders();
    for ( java.security.Provider p : providers ){
        String providerStr = String.format( "%s/%s/%f\n", p.getName(), p.getInfo(),
                                            p.getVersion() );
        mLog.debug( providerStr );
        Set< Service > services = p.getServices();
        List< String > algs = new ArrayList<>();
        for ( Service s : services ){
            boolean match = true;
            if ( algFilter != null ){
                match = s.getAlgorithm().toLowerCase().contains( algFilter.toLowerCase() );
            }

            if ( match ){
                String algStr = String.format( "\t%s/%s/%s", s.getType(),
                                               s.getAlgorithm(), s.getClassName() );
                algs.add( algStr );
            }
        }

        Collections.sort( algs );
        for ( String alg : algs ) mLog.debug( "\t" + alg );
        mLog.debug( "" );
    }
}//listAlgorithms
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...