PHP Openssl AES-CBC для Delphi DCPCrypt [дубликат]

  1. mvn install

Вы можете написать код ниже в командной строке или если вы используете eclipse builtin maven, щелкните правой кнопкой мыши по проекту -> Run As -> run configurations ... -> в левой панели щелкните правой кнопкой мыши на Maven Build -> new configuration -> напишите код в Goals & amp; в базовом каталоге: $ {project_loc: NameOfYourProject} -> Run

mvn install:install-file
   -Dfile=<path-to-file>
   -DgroupId=<group-id>
   -DartifactId=<artifact-id>
   -Dversion=<version>
   -Dpackaging=<packaging>
   -DgeneratePom=true

Где каждый относится к:

& lt; путь к файлу>: путь к файлу для загрузки, например, -> c: \ kaptcha-2.3.jar

& lt; group-id>: группа, в которой файл должен быть зарегистрирован, например, -> com.google.code

& lt; artifact-id>: имя артефакта для файла, например, -> kaptcha

& lt; version>: версия файла e.g -> 2.3

& lt; упаковка>: упаковка файла, например. -> jar

2. После установки просто объявляет jar в pom.xml.

 <dependency>
      <groupId>com.google.code</groupId>
      <artifactId>kaptcha</artifactId>
      <version>2.3</version>
 </dependency>
0
задан Sheshman 20 June 2014 в 15:53
поделиться

2 ответа

Как мы можем видеть, вы пытаетесь сравнить тот, который явно закодирован с использованием hex. Другой - с базой64.

в php

  • позволяет отложить просадку (это делается автоматически).
  • не выполняют base64_encode (что вы еще не сделали в delphi).

php manual

Описание:


string mcrypt_encrypt (строка $ cipher, string $ key, string $ data, string $ mode [, string $ iv])

Шифрует данные и возвращает их.

......

data

Данные, которые будут зашифрованы с помощью данного шифра и режима. Если размер данных не является n * blockize, данные будут дополняться «\ 0».

Возвращенный криптотекст может быть больше, чем размер данных, данных данными.

Режим ECB игнорирует IV, поэтому вводить пример в пример, используя MCRYPT_MODE_ECB и IV (пример в руководстве показывает то же самое). Кроме того, важно знать, что ECB полезен для случайных данных, но структурированные данные должны использовать более сильный режим, например MCRYPT_MODE_CBC

php Code

function encrypt($input) {
    // $iv = mcrypt_create_iv(32);
    $mcr = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, "KRPTTT101103",
                          $input, MCRYPT_MODE_ECB);
    $hex2 = bin2hex($mcr); // Convert binary data into hexadecimal representation
    return strtoupper($hex2);
    // base64_encode($mcr);
    }

$encryptedhextext = encrypt("sifrelenecek");

 if ($encryptedhextext == "FBE4A4405D6C1B54503D9B213E41AE56" ) {
   echo   "Encrypted Hex text in Delphi and php are equal<br />";    
   echo $encryptedhextext." == FBE4A4405D6C1B54503D9B213E41AE56";
 }

Выход

Шифрованный текст Hex в Delphi и php равны FBE4A4405D6C1B54503D9B213E41AE56 == FBE4A4405D6C1B54503D9B213E41AE56

1
ответ дан moskito-x 23 August 2018 в 20:33
поделиться

Вы смешиваете две разные формы заполнения. Это то, что вызывает несоответствие. Это не просто различие Base64 / hex.

Ваш открытый текст равен 12 байтам: «sifrelenecek», закодированный как:

[115, 105, 102, 114, 101, 108, 101, 110, 101, 99, 101, 107]

Если вы накладываете открытый текст на ZEROES, как очевидно Delphi и, как указано в mcrypt_encrypt, вы шифруете:

[115, 105, 102, 114, 101, 108, 101, 110, 101, 99, 101, 107, 0, 0, 0, 0]

Полученный в результате шифрованный текст ++ SkQF1sG1RQPZshPkGuVg == в Base64, который при декодировании на простые байты и перекодировке в шестнадцатеричном формате, становится «FBE4A4405D6C1B54503D9B213E41AE56» - то, что возвращается онлайн-инструменту.

Но если вы набиваете открытый текст с помощью дополнения PKCS # 7, как и в вашем PHP-коде выше:

$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);

, тогда этот открытый текст заполняется ЧЕТЫРЕ, и вы шифруете:

[115, 105, 102, 114, 101, 108, 101, 110, 101, 99, 101, 107, 4, 4, 4, 4]

Получившийся зашифрованный текст + wL2yf + 72thixicjw0duQA == - только то, что вы показываете выше в своем вопросе.

Любая панель с обеих сторон с ZEROES или панель с обеих сторон с PKCS # 7, и ваши результаты должны совпадать.

5
ответ дан Jim Flood 23 August 2018 в 20:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: