должен быть исходный текст используется в качестве параметра, как же PHP реализовать/преобразовать его в 256 битовый символ с?
Тройной DES и применение DES три раза с тремя (разными) DES-ключами. Один ключ DES имеет длину 56 бит и 64 бит с контролем четности. Итак, ключ 3DES должен состоять из трех разных DES ключей, которые должны привести к одному 192-битовому ключу.
Ключи должны иметь высокую энтропию, так что необходимо было бы сколотить значительную часть пространства клавиш. Если ключ является паролем, то это значительно проще, потому что пароли имеют встроенный формат и ограниченный набор символов. Вот почему ключ должен быть получен из паролей. Обычно это делается с помощью PBKDF2, bcrypt или scrypt (со случайно генерируемой солью и множеством итераций в тысячах или миллионах/с высоким коэффициентом стоимости).
Теперь mcrypt принял некоторые спорные решения. Например, он с радостью принял (в ранних версиях PHP) недопустимые ключи и IV, заполнив их 0x00 байт до следующего допустимого размера или обрезая их до следующего допустимого размера. Вот почему использование «plaintextkey» - не очень хорошая идея. Это приведет к 0x00 байт для некоторых байтов второго ключа и полных 0x00 байт для третьего ключа.
mcrypt является отказом и больше не должен использоваться. Вы можете использовать расширение OpenSSL в PHP или одну из многих хороших библиотек шифрования, таких как libsodium или defuse/php-encryption.
Если используется метод CBC, разве это не зависит от ранее зашифрованного текста?
Вы можете использовать последний блок зашифрованного текста как IV для следующего шифрования, но это только усложняет код шифрования. Вы действительно должны использовать случайный IV каждый раз и просто добавлять его к зашифрованному тексту. Он не должен быть секретным, а скорее непредсказуемым. Вы можете хранить его вместе с случайной солью раньше. Смотри также: Why use an Initialization Vector (IV)?
есть ли результат TripleDES в моем формате? Потому что, когда я искал в Интернете и никогда не видел, чтобы приведенное шифрование было в такой форме.
Современные шифры (с шифрованием формата сохраняющими является заметным исключением) производят шифртексты, которые должны быть indistinguishable from random "noise". Таким образом, вы можете получать непечатаемые символы, такие как \ x01 и многие другие, как часть зашифрованного текста. Вы хотите напечатать зашифрованный текст, тогда вам нужно закодировать в каком-то печатном формате в примере с использованием Hex или Base 64.
Тогда я предполагаю, что они предприняли довольно упрощенный подход. Попробуйте указать их на страницу [PHP Manual page] (http://php.net/manual/en/function.mcrypt-encrypt.php), где он предлагает правильный способ делать что-то, все это в примере, а не в описание функций mcrypt – RiggsFolly
@RiggsFolly Итак, использование ключей и IV было неправильным? Я вижу, что в предыдущей версии PHP они добавили \ 0 padding. Предыдущие ключи и IV были дополнены байтами «\ 0» до следующего допустимого размера., Поэтому, если бы они использовали последний PHP, он бы вернул false? –