Существует существующая система PHP (разработанная другой компанией), которая имеет следующий код шифрования.
$mopen = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', 'cfb', '');
mcrypt_generic_init($mopen, keygenerator(), $iv);
$cipherText = mcrypt_generic($mopen, $imageContent);
В приведенном выше коде вторая строка, второй параметр — тип возврата key.keygenerator() — int между 10-99.
mcrypt_generic_init (ресурс $td, строка $key, строка $iv): int
Мне нужно расшифровать полученные файлы с помощью java. Я использую библиотеку bouncycastle, и мне нужно указать ключ в виде массива байтов. Если генератор ключей () генерирует 32 в качестве ключа. Как я могу указать его в java как жестко закодированное значение. Если я использую следующий код.
String key = "32";
cipher.init(cryptoType, new ParametersWithIV(new KeyParameter(key.getBytes()), iv.trim().getBytes()));
Это дает мне следующую ошибку.
Исключение в потоке main java.lang.IllegalArgumentException: длина ключа не 128/160/192/224/256 бит.
keygenerator()
возвращает числа или строки? С числами также необходимо учитывать преобразования (например, восьмеричное/десятичное, экспоненциальное представление больших чисел и т. д.). Для цифр (числа в виде строк) было бы проще: PHP дополняет значениями 0 до требуемой длины ключа. MCRYPT_RIJNDAEL_256 поддерживает 3 длины ключа 16, 24 и 32 байта. Если длина ключа находится между ними, PHP переходит к следующей длине ключа с нулевыми значениями. - person user 9014097   schedule 23.09.2020keygenerator()
или хотя бы сделать некоторые уточнения, например. о диапазоне значений. - person user 9014097   schedule 23.09.2020$key = 32
,$key = "32"
или$key = "32\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
. В Java вы должны использовать последнее, то есть шестнадцатеричное кодирование:33320000000000000000000000000000
. Конечно, это ужасно небезопасно. - person user 9014097   schedule 23.09.2020