Я уже некоторое время борюсь с этой проблемой. Дело в том, что я должен отправить строку PEM на сервер, который ожидает последний шаг следующего:
- Ключ шифрования типа 3DES или AES-256.
- Этот ключ, зашифрованный ключом RSA.
- Этот вывод, закодированный в Base64 и в формате PEM.
Вот что я получил до сих пор:
На основе ключа RSA, полученного с сервера, я создаю шифр:
Cipher rsa = Cipher.getInstance("RSA"); rsa.init(Cipher.ENCRYPT_MODE, (RSAPublicKey) obj);
Позже я создаю ключ AES:
//IV. byte[] bytes = new byte[16]; SecureRandom random = new SecureRandom(); random.nextBytes(bytes); Map<String, byte[]> aes = new HashMap<String, byte[]>(); aes.put("IV", ConversionUtil.toHex(bytes, 8).getBytes()); KeyGenerator keyGen = KeyGenerator.getInstance("AES"); keyGen.init(256); Key encryptionKey = keyGen.generateKey(); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, encryptionKey, new IvParameterSpec(ConversionUtil.toHex(bytes, 8).getBytes())); aes.put("key", cipher.doFinal(encryptionKey.getEncoded()));
Используйте все это для создания строки PEM:
StringBuilder sb = new StringBuilder();
sb.append(StringUtils.repeat("-", 5));
sb.append("BEGIN PEM file");
sb.append(StringUtils.repeat("-", 5));
sb.append("\n");
sb.append("Proc-Type: 4,ENCRYPTED\n");
sb.append("DEK-Info: " + "AES-256-CBC" + "," + new String(aes.get("IV")) + "\n");
sb.append("");
sb.append(Base64.encode(rsa.doFinal(aes.get("key"))));
sb.append("\n");
sb.append(StringUtils.repeat("-", 5));
sb.append("END PEM file");
sb.append(StringUtils.repeat("-", 5));
А затем отправьте это на сервер, который выдает следующую ошибку:
3936: ошибка: 0906D06C: подпрограммы PEM: PEM_read_bio: нет стартовой строки:.\crypto\pem\pem_lib.c:698:
У меня не так много информации об ошибке, но я хотел проверить, не делаю ли я что-то не так в процессе, поскольку кажется, что ошибка связана с непризнанием PEM.
Дайте знать, если у вас появятся вопросы.
Спасибо!
RSA
, а вы шифруете ключ с помощьюAES
- person Amit Deshpande   schedule 05.12.2012RSA
. - person Amit Deshpande   schedule 05.12.2012