Android Studio не читает .pfx сертификат для подписи приложения - PullRequest
0 голосов
/ 08 марта 2020

Я хочу подписать строку для своего приложения, используя сертификат .pfx A1, но Android Studio не читает файл. Приведенная ниже итерация * работает на Netbeans просто отлично, но в Android Studio возвращает false, поскольку она вообще не читала файл .pfx. Я слышал, что он должен быть преобразован в формат .JKS, но я не уверен.

public String signApp(String input) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException, KeyStoreException, IOException, CertificateException, UnrecoverableEntryException {
        String signedString = "";
        InputStream certificado;
        char[] password = null;
        KeyStore keystore = null;
        Enumeration<String> aliases;
        String alias = "";
        //Open the .pfx file
        certificado = getClass().getResourceAsStream("imediata.pfx");
        
        password = "1234".toCharArray();
        keystore = KeyStore.getInstance("PKCS12");
        keystore.load(certificado, password );
        //Get the alias
        KeyStore.PrivateKeyEntry pkEntry = null;
        PrivateKey pk = null;
        try {
            aliases = keystore.aliases();
            while(aliases.hasMoreElements()) { //* problem: it's returning false as it not reading at 
                                               // all!!
                alias = aliases.nextElement();
                if (keystore.isKeyEntry(alias)) {
                    pkEntry = (KeyStore.PrivateKeyEntry) keystore.getEntry(alias, new 
                    KeyStore.PasswordProtection(password ));
                    pk = pkEntry.getPrivateKey();
                } 
            }
        } catch (KeyStoreException e) {
            throw new RuntimeException("CATCH", e);           
        }
        
        //Keystore

        Key key = (PrivateKey) keystore.getKey(alias, password );
        java.security.cert.Certificate cert = keystore.getCertificate(alias);
        PublicKey publicKey = cert.getPublicKey();
        KeyPair kPair = new KeyPair(publicKey, (PrivateKey) key);

        byte[] buffer = chave.getBytes();
        // Signature
        Signature signatureProvider = Signature.getInstance("SHA1withRSA");
        signatureProvider.initSign(kPair.getPrivate()); 
        signatureProvider.initSign(pk);
        signatureProvider.update(buffer, 0, buffer.length);
        byte[] signature = signatureProvider.sign();        
        signedString = Base64.getEncoder().encodeToString(signature);
        return signedString;        
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...