PHP.Проходя строку по байтам. - PullRequest
0 голосов
/ 17 января 2012

Увидев функцию getBytes () в Java для шифра Цезаря, я думаю о возможности клонировать эту функцию в PHP.

В Java функция:

private static final SHIFT_LENGTH = 0x3;

public static String encode(String str) 
{
    str = "teststring";

    byte[] bytes = str.getBytes("UTF8");

    for (int i=0; i < bytes.length; ++i)
    {
        bytes[i] = bytes[i] + SHIFT_LENGTH;
    }

    // Base-64 encode
    return new BASE64Encoder().encode(bytes);
}

Функция должна добавлять три к каждому байту в строке и затем кодировать ее в base-64. Я пробовал несколько вариантов в PHP, например:

function encode_php($str)
{
    $str = utf8_encode("teststring");

    $new_str = '';

    for ($i = 0; $i < strlen($str); $i++) {
        $new_str .= ord($str[$i])+3;
    }

    return base64_encode($new_str);
}

Я явно упускаю что-то с точки зрения кодирования или обработки отдельных байтов в PHP, но я не уверен, что именно. Я пытался использовать dechex () и bin2hex (), чтобы связываться с кодировкой, но не могу получить результаты для соответствия. Есть идеи?

1 Ответ

1 голос
/ 17 января 2012

Разве вы не имеете в виду $new_str .= chr((ord($str[$i])+3)%256);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...