Как зашифровать с помощью публичного сертификата X509 с Android? - PullRequest
2 голосов
/ 07 декабря 2011

Я пытаюсь зашифровать текстовый файл, используя файл сертификата .pfx, используя:

public void EncryptUsingPublicKey(File in, File out, File publicKeyFile) throws IOException, GeneralSecurityException {

    byte[] encodedKey = new byte[(int)publicKeyFile.length()];
    new FileInputStream(publicKeyFile).read(encodedKey);

    // create public key
    X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encodedKey);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    PublicKey pk = kf.generatePublic(publicKeySpec);

    FileInputStream is = new FileInputStream(in);
    Cipher pkCipher = Cipher.getInstance("RSA");
    pkCipher.init(Cipher.ENCRYPT_MODE, pk);
    CipherOutputStream os = new CipherOutputStream(new FileOutputStream(out), pkCipher);
    copy(is, os);
    os.close();
}

У меня две проблемы:

  1. Где хранить файл .pfx на устройстве?
  2. Корректна ли эта функция?

1 Ответ

0 голосов
/ 07 декабря 2011

Не думаю, что ваш код будет работать. Файлы PFX - это файлы AFAIR PKCS # 12, которые могут содержать несколько сертификатов и ключей. Используемая вами спецификация X509EncodedKeySpec требует наличия ровно одного сертификата в файле .CER (DER / двоичный формат).

Поэтому у вас есть следующие две опции:

  1. Извлечение сертификата из файла PFX в виде файла CER (например, с помощью инструмента GUI portecle ) или
  2. Попробуйте прочитать файл PFX как хранилище ключей PKCS # 12, в котором оно представлено здесь: хранилище ключей Java PKCS12 из CA и сертификат пользователя в java

В конце вы можете включить файл PFX / CER в качестве ресурса в ваше приложение andoid: Загрузить файл из ресурса

...