RSSL_PAD_ISO10126 Метод заполнения в php

1

У меня есть клиент, использующий прокси-сервер через аутентификацию, и у меня возникают проблемы с правильной шифровкой.

Это вся информация, которую я имею от клиента:

  1. secretKey = 32 символьная строка, предоставленная мне
  2. список параметров, которые необходимо зашифровать.
  3. Метод кодирования - это кодировка Base 64.
  4. Метод шифрования - aes256.
  5. Метод KegGen - PKCS5-V20.
  6. Метод заполнения - RSSL_PAD_ISO10126.
  7. Чтобы убедиться, что URL-адрес безопасен, некоторые символы должны быть заменены. (+ становится _;/становится ~; и = становится *).

До сих пор у меня есть следующий код, но я не на 100%. Я делаю шифрование правильно, а также не знаю, как реализовать дополнение RSSL_PAD_ISO10126, или что делать с кейгентом PKCS5-V20. Я нашел здесь еще одно сообщение, в котором объясняется, что шифрование aes256 было MCRYPT_RIJNDAEL_128. Будем очень благодарны за любую информацию о том, как действовать.

public static function ptaLink($pid, $params = [])
{
    $url = \Config::get('chat.ptaBaseUrl');

    $params['p_userid'] = $pid;
    $params['p_ccf_1'] = $pid;

    $ptaDataString = self::buildParams($params);

    return $url.$ptaDataString;
}

public static function buildParams($params) {

    $defaultParams = [
        'p_userid' => '', // PID
        'p_passwd' => '',
        'p_ccf_1' => '', // PID
        'p_li_expiry' => time(),
    ];

    $params = array_merge($defaultParams, $params);

    //Convert PTA data array to string
    $ptaDataString = "";
    foreach($params as $key=>$value)
    {
        $ptaDataString .= ($ptaDataString === "") ? '' : '&';
        $ptaDataString .= "$key=$value";
    }

    $ptaDataString = self::encryptData($ptaDataString);

    return $ptaDataString;
}

public static function encryptData($text) {

    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM);
    $key = \Config::get('chat.secretKey');

    $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);

    //Base64 encode the data
    $ptaDataString = base64_encode($crypttext);

    //Make sure the data is URL safe
    $ptaDataString = strtr($ptaDataString, array('+' => '_', '/' => '~', '=' => '*'));

    return $ptaDataString;

}
  • 0
    Эх, в mcrypt_encrypt у вас есть только вызов mcrypt_encrypt а мы должны запрограммировать все остальное?
  • 0
    Нет, я считаю, что все правильно, за исключением реализации заполнения в RSSL_PAD_ISO10126. Я смог вывести из спецификации (и в этом посте crypto.stackexchange.com/questions/1922/… ) именно то, что представляет собой этот метод заполнения, но не уверен, как именно реализовать.
Теги:
encryption
aes

1 ответ

0

Реализация здесь для тех, кому это когда-либо понадобится, https://github.com/ircmaxell/PHP-CryptLib/blob/master/lib/CryptLib/Encryption/PackingMode/ISO10126.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню