Как PHP обрабатывает 32-байтовые ключи для тройного шифрования

Извините всех - новичок в шифровании - гуглил несколько дней и наконец сразу спросил.

Мне нужно использовать PHP для шифрования и дешифрования данных, которые читаются функцией Java TripleDES «DESede / ECB / NoPadding».

В Java есть 32-символьный ключ двойной длины, например. "F4D5CBDF57FEEDCFA41FD6AFE7BCDFEA", который конвертируется в байты и обеспечивает зашифрованный результат без каких-либо проблем. (У меня нет кода.)

В PHP, когда тот же ключ используется через mcrypt для вызова функции tripledes, ecb, возникает ошибка длины ключа, поскольку система ожидает максимум 24 символа.

Что мне нужно сделать с ключом, чтобы PHP выдал тот же зашифрованный результат, что и Java?


person Dash Weh    schedule 11.02.2014    source источник
comment
Вы должны выяснить, что такое функция вывода ключей в Java. TripleDES принимает ключи размером до 168 бит (21 байт). Этот 32-символьный ключ выглядит так, как будто на самом деле это 128 бит данных, закодированных в шестнадцатеричном формате.   -  person NullUserException    schedule 11.02.2014


Ответы (1)


Как постулируется NullUserException: пожалуйста, преобразуйте ключ из шестнадцатеричных чисел в двоичный, прежде чем использовать его для своего тройного шифра DES. Ваш Java-код должен делать то же самое; в Java тройной ключ DES должен иметь либо 24 байта, либо 16 байтов (16 байтов поддерживаются только для более поздних версий Java, ранее вам приходилось преобразовывать в 24 байта, копируя первые 8 байтов в конец, чтобы создать "ABA" DES ключ).

32-байтовые ключи никогда не поддерживаются для тройного DES. Однако, если вы используете ужасные библиотеки mcrypt для PHP, ключ будет обрезан до максимального доступного размера. Таким образом, вместо того, чтобы приводить к сбоям, PHP скорее заставит своих пользователей выдергивать волосы от разочарования.

person Maarten Bodewes    schedule 12.02.2014
comment
За исключением заслуженного удара по библиотекам mcrypt, чего-нибудь не хватает в моем ответе? Требуются какие-либо разъяснения? - person Maarten Bodewes; 30.03.2014