Я новичок в шифровании. Этот вопрос является подтекстом моего предыдущего. У меня есть файл, зашифрованный с OpenSSL Util:Как расшифровать зашифрованный файл AES с параметром '-nosalt'
openssl aes-256-cbc -in fileIn -out fileOUT -p -k KEY
Я использую этот код для его расшифровки:
byte[] encrypted = IOUtils.toByteArray(inputStream);
Security.addProvider(new BouncyCastleProvider());
String password = "abc";
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
// Openssl puts SALTED__ then the 8 byte salt at the start of the
// file. We simply copy it out.
byte[] salt = new byte[8];
System.arraycopy(encrypted, 8, salt, 0, 8);
SecretKeyFactory fact = SecretKeyFactory.getInstance(
"PBEWITHMD5AND256BITAES-CBC-OPENSSL", "BC");
c.init(Cipher.DECRYPT_MODE, fact.generateSecret(new PBEKeySpec(
password.toCharArray(), salt, 100)));
// Decrypt the rest of the byte array (after stripping off the salt)
byte[] data = c.doFinal(encrypted, 16, encrypted.length - 16);
И это работает. Но это тестовый пример. Реальная ситуация такова, что у меня есть файл, зашифрованный с этими Params:
openssl aes-256-cbc -nosalt -in fileIn -out fileOUT -p -k KEY
Обратите внимание, что "-nosalt Парам появился. Проблема в том, что PBEKeySpec требует не пустых, а не пустых salt
и iterationsCount
параметров. Кроме того, есть конструктор без этих Params, но если я использую его, то я получаю сообщение об ошибке:
02-11 11:25:06.108: W/System.err(2155): java.security.InvalidKeyException: PBE requires PBE parameters to be set.
Вопрос заключается в том, чтобы расшифровать эти файлы? Как правильно обращаться с параметром «-nosalt»?