У меня есть некоторые данные от внешней стороны, которые зашифрованы в соответствии с ними в: 'Rijndeal 256 с закрытым ключом'
Наряду с этими записями есть сертификат открытого и закрытого ключа, который выглядит как сертификаты RSA.
Из того, что я узнал до сих пор, кажется, что наиболее распространенный способ использования шифрования с сертификатами - генерировать «секретный ключ» или какой-то другой вектор инициализации и использовать его для шифрования текста.Поэтому я думаю, что это, вероятно, то, что они сделали (данные были зашифрованы приложением PHP)
Я пытаюсь расшифровать этот текст с помощью javax.crypto.Cipher, но я думаю, что, вероятно, мне нужно больше информациина конкретном шифровании, но я действительно не знаю, какую информацию запрашивать, и думаю, что, вероятно, будут работать «опции по умолчанию».(Связь с поставщиком - трудная и медленная).
В настоящее время я использую следующий код для получения закрытого ключа:
InputStreamReader ir = new InputStreamReader(the_inputstream_for_the_private_key_record);
Security.addProvider(new BouncyCastleProvider());
pemr = new PEMReader(ir);
Object o = pemr.readObject();
keyPair kp = (KeyPair) o;
return kp.getPrivate();
Это работает, когда я получаю экземплярОбъект PrivateKey без ошибок выглядит так:
RSA Private CRT Key
modulus: c98faa50ba69<trimmed>
public exponent: 10001
private exponent: bb889fbe5cb2a6763f...<trimmed>
primeP: eb73e85dc636f5751b...<trimmed>
primeQ: db269bd603a2b81fc9...<trimmed>
primeExponentP: 85b9f111c190595cc8...<trimmed>
primeExponentQ: a66d59a75bb77530de...<trimmed>
crtCoefficient: 79415b078c4c229746...<trimmed>
Для каждой записи у меня также есть запись, подобная следующей:
{
"decryptedLength":128389,
"symKeyLength":32,
"symKey":"SImE8VnSZaAu1Ve...<trimmed (this is always 685 chars long) >...ayaJcnpSeOqAGM7q="
}
По сути, это то, где я немного застрял.Я предполагаю, что это значение 'symkey' зашифровывается с помощью RSA, который, в свою очередь, при расшифровке дает секретный ключ для части AES, но если я попытаюсь:
Cipher rsaCipher = Cipher.getInstance("RSA");
rsaCipher.init(Cipher.DECRYPT_MODE, key);
byte[] b = rsaCipher.doFinal('symkey'.getbytes());
, то получится "javax.cryptoIllegalBlockSizeException: данные не должны быть длиннее 512 байт ", что кажется логичным, поскольку эта строка имеет длину 685 символов
Я, вероятно, здесь упускаю что-то очень очевидное ... Любые предложения приветствуются.