Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515

Шифрование utf строки

11.07.2016, 12:16. Показов 2112. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Не работает следующий код шифрования по методу XOR (файл functions.php):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
  function XorEncode($key, $source){
    $res = '';   
    for ($i = 1; $i <= strlen($source); $i++ ){
        if (strlen($key) > 0){
            $c = ord($key[1 + (($i-1) % strlen($key))]) ^ ord($source[$i]);
        }
        else{
            $c = ord($source[$i]);
        }      
        $res = $res . strtolower(dechex($c));
    }
    return $res;
  }
Функцию вызываю следующим образом (файл index.php):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php        
        require_once('./functions.php');        
        echo XorEncode("ключ", "Это тестовая строка");
        ?>
    </body>
</html>
Получаю такой результат:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
( ! ) Notice: Uninitialized string offset: 8 in C:\xampp\htdocs\PhpProject1\functions.php on line 95
Call Stack
#   Time    Memory  Function    Location
1   0.0156  134312  {main}( )   ...\index.php:0
2   0.0781  146264  XorEncode( )    ...\index.php:18
 
( ! ) Notice: Uninitialized string offset: 8 in C:\xampp\htdocs\PhpProject1\functions.php on line 95
Call Stack
#   Time    Memory  Function    Location
1   0.0156  134312  {main}( )   ...\index.php:0
2   0.0781  146264  XorEncode( )    ...\index.php:18
 
( ! ) Notice: Uninitialized string offset: 8 in C:\xampp\htdocs\PhpProject1\functions.php on line 95
Call Stack
#   Time    Memory  Function    Location
1   0.0156  134312  {main}( )   ...\index.php:0
2   0.0781  146264  XorEncode( )    ...\index.php:18
 
( ! ) Notice: Uninitialized string offset: 8 in C:\xampp\htdocs\PhpProject1\functions.php on line 95
Call Stack
#   Time    Memory  Function    Location
1   0.0156  134312  {main}( )   ...\index.php:0
2   0.0781  146264  XorEncode( )    ...\index.php:18
 
( ! ) Notice: Uninitialized string offset: 36 in C:\xampp\htdocs\PhpProject1\functions.php on line 95
Call Stack
#   Time    Memory  Function    Location
1   0.0156  134312  {main}( )   ...\index.php:0
2   0.0781  146264  XorEncode( )    ...\index.php:18
17139130f156826a656a505f5357be6a626b615f5ea7d13b1390e139d000bd1
То есть на выходе куча ошибок и зашифрованный результат в конце.
Строка 18 в файле index.php содержит вызов функции XorEncode, а строка 95 в functions.php содержит
PHP
1
$c = ord($key[1 + (($i-1) % strlen($key))]) ^ ord($source[$i]);
Помогите, пожалуйста, исправить ошибку в алгоритме.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.07.2016, 12:16
Ответы с готовыми решениями:

Необходимо UTF-8 XOR шифрование
Есть 2 прекрасные функции XOR шифрования function XorEncode(Source, Key: String): String; var I: Integer; C: Byte; begin ...

getBytes('UTF-16') даёт UTF-16LE или UTF-16BE?
Добрый день! Делаю J2ME-клиента к некому серверу, исходников которого у меня нет, но есть работающий клиент на C#. Выяснилось, что C#...

<globalization fileEncoding='utf-8' requestEncoding='utf-8' responseEncoding='utf-8' />
Если в коде пишу строку скажем Response.Write ('Вася дурак') - все срабатывает нормально, а если в &lt;body&gt;&lt;h1&gt;Вася...

5
Hello Kitty
 Аватар для WhiteMind
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
11.07.2016, 15:03
Лучший ответ Сообщение было отмечено WoodHead как решение

Решение

Предположим:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
 
function XorEncode($key, $source) {
    $res = '';   
    for ($i = 0; $i < strlen($source); $i++ ) {
        $char = ord($source[$i]);
        if (strlen($key) > 0) {
            $char = ord($key[ $i % strlen($key)]) ^ $char;
        }
        $res = $res . strtolower(substr("0".dechex( $char ),-2));
    }
    return $res;
}
    
function XorDecode($key, $source) {
    $res = '';   
    for ($i = 0; $i < strlen($source); $i+=2) {
        $char = hexdec(substr($source,$i,2));
        if (strlen($key) > 0) {
            $char = ord($key[ ($i>>1) % strlen($key)]) ^ $char;
        }
        $res = $res . chr($char);
    }
    return $res;
}
 
$enc = XorEncode("ключ", "Это тестовая строка");
$src = XorDecode("ключ", $enc);
 
echo $enc,"\n";
echo $src,"\n";
Добавлено через 15 секунд
http://sandbox.onlinephpfuncti... e11d38406e
1
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
11.07.2016, 16:38  [ТС]
WhiteMind, судя по ответу, либо эту тему поднимает каждый второй начинающий кодер, то ли это стандартные функции. Может, их можно не писать, а просто вызывать из стандартных модулей?
0
1137 / 685 / 412
Регистрация: 07.11.2015
Сообщений: 1,102
11.07.2016, 18:10
Можно и покомпактнее реализовать:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
function XorEncode($key, $source) {
 
    $res = $source ^ str_pad('', strlen($source), $key);
 
    return bin2hex($res);
}
 
 
function XorDecode($key, $source) {
 
    $res = pack('H*', $source);
 
    return $res ^ str_pad('', strlen($res), $key);
}
 
 
$enc = XorEncode("ключ", "Это тестовая строка");
$src = XorDecode("ключ", $enc);
 
echo $enc,"\n";
echo $src,"\n";
http://sandbox.onlinephpfuncti... 087e029534
2
Hello Kitty
 Аватар для WhiteMind
690 / 562 / 402
Регистрация: 12.02.2016
Сообщений: 1,436
Записей в блоге: 1
11.07.2016, 18:25
Цитата Сообщение от WoodHead Посмотреть сообщение
а просто вызывать из стандартных модулей?
http://php.net/manual/ru/function.crypt.php http://php.net/openssl http://php.net/mcrypt
не xor конечно
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
11.07.2016, 18:36  [ТС]
Emilien, спасибо, очень интересное решение.

Добавлено через 6 минут
WhiteMind, нет, меня интересует результат именно в том виде, в котором вы ответили ранее. Просто на FreePascal есть стандартные функции, которые я пытался реализовать на PHP. Вот и подумал, что раз задача часто встречается, может быть есть аналог этих функций, уже "встроенных" в PHP из коробки. В любом случае, меня ваш ответ и ответ Emilien устраивает более чем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.07.2016, 18:36
Помогаю со студенческими работами здесь

Конвертация из ASCII в UTF-32 или UTF-8 в UTF-32
Собсно сабж.

Сравнение строки в utf-8
Добрый день! Я только начинаю изучать Си. Нужно сравнить результат функции getenv(&quot;REQUEST_METHOD&quot;) со строкой...

Перевод строки из unicode в UTF-8
Привет. Уже пытался искать на форуме, видимо плохо искал. Из строки &quot;\u041f\u0415\u0420\u0412\u042b\u0415 шаги&quot; надо получить строку...

Перевод строки в utf-16 string
К своему большому стыду, дальше &quot;hello world&quot; в университете по c++ не продвинулся. А вот сейчас стала проблема отправки сообщений на...

Отличить числовые байты от строки utf-8
Здравствуйте! Подскажет, как в шарпе отличить числовые байты от строки utf-8? Вообщем, у меня есть сокет, в который приходит массив...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru