不受AndroidKeyStore提供程序支持的加密基元

问题描述 投票:1回答:1
                        KeyStore keyStore
                            = null;
                    try {
                        keyStore = KeyStore.getInstance("AndroidKeyStore");
                    } catch (KeyStoreException e) {
                        e.printStackTrace();
                    }
                    try {
                        keyStore.load(null);
                    } catch (CertificateException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    } catch (NoSuchAlgorithmException e) {
                        e.printStackTrace();
                    }

                    try {
                        //Generowanie klucza z autoryzowanym uzytkownikiem

                        KeyPairGenerator keyGenerator = null;

                        keyGenerator = KeyPairGenerator.getInstance(
                                KeyProperties.KEY_ALGORITHM_RSA, "AndroidKeyStore");


                        keyGenerator.initialize(
                                new KeyGenParameterSpec.Builder("MyKeyAlias",
                                        KeyProperties.PURPOSE_ENCRYPT |
                                                KeyProperties.PURPOSE_DECRYPT)
                                        .setDigests(KeyProperties.DIGEST_SHA256,
                                                KeyProperties.DIGEST_SHA512)
                                        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
                                        .setUserAuthenticationRequired(true)
                                        .setUserAuthenticationValidityDurationSeconds(300)
                                        .build());

                        keyGenerator.generateKeyPair();

                        //Ladowanie szyfrowania i klucza publicznego
                        Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
                        PublicKey key = keyStore.getCertificate("MyKeyAlias").getPublicKey();
                        PublicKey unrestrictedPublicKey = KeyFactory.getInstance(key.getAlgorithm()).generatePublic(
                                new X509EncodedKeySpec(key.getEncoded()));
                        OAEPParameterSpec spec = new OAEPParameterSpec("SHA-256", "MGF1",
                                MGF1ParameterSpec.SHA1, PSource.PSpecified.DEFAULT);
                        cipher.init(Cipher.ENCRYPT_MODE, unrestrictedPublicKey, spec);
                        FingerprintManager.CryptoObject cryptoObject = new FingerprintManager.CryptoObject(cipher);
                        FingerprintHandler helper = new FingerprintHandler(this);
                        helper.startAuth(fingerprintManager, cryptoObject);

                    } catch (InvalidKeySpecException e) {
                        e.printStackTrace();
                    } catch (NoSuchAlgorithmException e) {
                        e.printStackTrace();
                    } catch (KeyStoreException e) {
                        e.printStackTrace();
                    } catch (InvalidKeyException e) {
                        e.printStackTrace();
                    } catch (InvalidAlgorithmParameterException e) {
                        e.printStackTrace();
                    } catch (NoSuchPaddingException e) {
                        e.printStackTrace();
                    } catch (NoSuchProviderException e) {
                        e.printStackTrace();
                    }

我正在尝试使用指纹登录功能来制作android记事本,并且正在使用密码保护笔记的安全。通过此代码,我得到:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.FingerprintLogin}: java.lang.IllegalArgumentException: Crypto primitive not backed by AndroidKeyStore provider: javax.crypto.Cipher@9d683ff, spi: com.android.org.conscrypt.OpenSSLCipherRSA$OAEP$SHA256@2c815cc

问题是,在另一个应用程序中,我使用了相同的代码来加密注释,并且运行良好。我已经检查过了,每种算法都受支持,所以我不知道问题出在哪里。

java android encryption keystore
1个回答
0
投票

我也面临着同样的问题。找到这个发布问题的解决方案了吗?

© www.soinside.com 2019 - 2024. All rights reserved.