Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Здравствуйте уважаемые Гуру! Понадобилось обмениваться зашифрованными строками между php и С++ Нашел абсолютно рабочий алгоритм RC4 на php и решил переписать его на С++ На всех этапах (при трассировке кодов на PHP и С++) я получаю одинаковые данные во всех массивах. Но на последнем этапе - преобразование массива с кодами символов зашифрованного текста в string , получаю результат, отличный от результата в PHP Ошибка в строке преобразования кода символа в char Подскажите пожалуйста в чем я "косячу" Код: php 1. 2. 3. 4. 5. 6. 7. 8. С++ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Я пробовал преобразовать массив кодов в массив char , чтобы потом перевести его в string , но в массиве char - уже несоответствие. Помогите пожалуйста разобраться Заранее благодарен всем кто захочет помочь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2017, 18:32 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Arbit, Используй unsigned char в коде C++, вместо char ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2017, 18:37 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
NekZ, спасибо Строку Код: plaintext 1. заменил на Код: plaintext 1. но результат тотже... :(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2017, 18:58 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Arbit, ошибка где-то в других местах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2017, 10:23 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Запиши в файл строку в обоих случаях и сравни файлы. Похоже косяк в PHP Код: php 1. 2. 3. 65533 это 0xFFFD, а должно быть 0x14CD или 0xCD14 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2017, 10:33 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Arbit, Проблема в том, что ваш код на каком-то этапе рассматривает строку string с кодами как набор уникодных символов. А там просто байты. Вот эта "Н" из "e\x14Нd" это двухбайтовый символ состоящий из байтов D0 и 9D. Тот С++ код что вы привели никак не может из 205 получить эти 2 байта. Значит проблема находится между этим кодом и функцией кодирования base64 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2017, 11:23 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, спасибо за участие! Что касается кода на PHP? то он полностью рабочий, кодирует и декодирует правильно И латиницу и кирилицу и иврит. Значение, в PHP которое я привел в сообщении исказила страница форума при отправке сообщения. На самом деле оно другое, но все равно не соответствует результату С++ По поводу юникода - я думал об этом. Там не только код 205 не обрабатывается функцией char или unsigned char Код 20, например, не соответствует результату на PHP Моих мозгов не хватает как это преобразование сделать корректным, чтобы скормить функции base 64 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2017, 13:24 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Скорее всего наверное надо попробовать преобразовать юникод в utf8? а потом уже пройтись unsigned char? или я не в ту сторону думаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2017, 13:34 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Или я чего-то крупное пропустил, или все пишущие в топике. Набор байт (101,20,205,100) в ASCII виде это e\x14\xCDd, ну или "e\x14Нd" если у вас cp1251 (четвертый символ большая русская Н). Открываем описание base64: https://en.wikipedia.org/wiki/Base64 Делаем по инструкции, конвертируем все четыре байта в двоичный код: 101 = 1100101b 20 = 10100b 205 = 11001101b 100 = 1100100b То есть вся строка в двоичном виде: 01100101 00010100 11001101 01100100 Бьем ее на группы из шести бит: 011001 010001 010011 001101 011001 00 Добиваем последнюю неполную группу нулями: 011001 010001 010011 001101 011001 000000 Конвертируем эти шестибитовые группы в десятичный: 25 17 19 13 25 0 Заменяем цифры на буквы из таблицы: ZRTNZA Так как по правилам base64 количество итоговых символов должно делиться на 4, добиваем результат знаками равенства: ZRTNZA== Итого: Функция в php работает правильно. А когда Arbit в первом посте заявил: Arbit//После преобразования Base64 результат - "ZRTQnWQ=" (функция преобразования в Base64 работает корректно!)Он явно соврал. Либо он отдает в корректно работающую функцию Base64 другую строку, либо эта функция работает неправильно. Arbit, откуда ты взял эту функцию? Покажи как ты отдаешь ей строку на конвертацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2017, 17:33 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
White Owl,простите новичка, но... авторИли я чего-то крупное пропустил, или все пишущие в топике. Вы действительно пропустили. Вы пропустили суть вопроса. а именно: - Функции base64 работают корректно в обоих скриптах - Исходный массив после XOR одинаков в обоих скриптах - На вход base64 подаются разные строки, потому что разный результат при преобразовании массива в строку символов в PHP и С++ И ближе всех, как мне кажется, был уважаемый Anatoly Moskovsky - строки в скриптах в разных кодировках. Я очень надеюсь , что откликнется Уважаемый Гуру Изопропил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2017, 20:21 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Arbit- На вход base64 подаются разные строки, потому что разный результат при преобразовании массива в строку символов в PHP и С++ Как вы передаете строку на вход base64 в С++ и как вы увидели, что строки разные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2017, 08:28 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Arbitстроки в скриптах в разных кодировках. Вы где-то между опубликованным куском С++ кода и кодировкой в base64 зачем-то пытаетесь перевести строку из win1251 в utf8... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2017, 08:37 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Не поленился найти реализацию base64 на С++ Код: plaintext 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. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2017, 09:15 |
|
||
|
Корректно преобразовать массив кодов символов в строку strong
|
|||
|---|---|---|---|
|
#18+
Barlone, BarloneВы где-то между опубликованным куском С++ кода и кодировкой в base64 зачем-то пытаетесь перевести строку из win1251 в utf8... Вы правы Спасибо большое Anatoly Moskovsky и Barlone (жаль не нашел кнопку "поблагодарить") Вопрос закрыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2017, 15:17 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39448168&tid=2018175]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
178ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 281ms |

| 0 / 0 |
