![]() |
|
|
![]()
|
|
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
У меня небольшая проблема с этим шифрованием... Оказалось, он не шифрует символ переноса строки. И, значит, как мне кажется, не шифрует и символ табуляции. Это исправляемо?
|
|||
|
||||
| Сый |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 131 Регистрация: 23.1.2006 Репутация: нет Всего: 3 |
Странный вопрос. Что передаёшь функции/задаче, то и шифруется (если она, конечно, нормально реализована).
--------------------
Язык программирования, родственный языкам Паскаль и Оберон, использующий русские служебные слова - Глагол: http://glagol.nad.ru |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
xor-шифрование, как и большинство известных мне алгоритмов шифрования не имеет дела с текстом
они имеют дело только с последовательность чисел поэтому алгоритму, обычно по барабану семантическая нагрузка символа в более сложные алгоритмы встраивается учёт вероятностей появления того или иного символа, что позволяет затруднить статистические методы взлома в ещё более сложных алгоритмах могут использоваться какие-нибудь более глубокие данные о символах но xor - явно не тот случай тут, ИМХО, проблема находится где-то между приёмом текста от пользователя и отправкой массива байт в алгоритм шифрования... -------------------- qqq |
|||
|
||||
| mr.Anderson |
|
||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
хм... сама функция шифровки описана так:
А вызывается она вот таким макаром:
Где Rezults - компонент класса TMemo, XOR_Crypt() - собственно функция шифровки, Temp - еще компонент класса TMemo, XORCryptkey - компонент TEdit, в который вводится ключ для расшифровки. |
||||
|
|||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Да елки! Неужто никто в жизнь не шифровал этим алгоритмом символы переноса строки!
|
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
1. как проявляется "нешифрование" символов переноса строки
2. неплохо было бы посмотреть шифруемую строку, как последовательность кодов её символов -------------------- qqq |
|||
|
||||
| mr.Anderson |
|
||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
секунду.... не понял... сейчас снова попробовал закодировать-расшифровать, почему-то получилось... правда, я там код слегка менял... мда. Ладно, прошу извинить за беспокойство, проблема решилась как-то сама собой...
Добавлено @ 19:16 Нет, не решилась! Протестировал еще раз, пожестче. Оказалось, что символы переноса строки шифруются нормально! Не шифруется цифра 1 ! Вот что! То есть, я пробовал зашифровать вот такое:
В итоге в файле получал кракозябры, как и надо. Расшифровываю, на выходе получаю следующее:
Т.е. символы при шифровке урезаются до единицы. Почему так? То есть проблемой является только единица! |
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
У тебя там скорее всего трабла с '\0' тобишь с символом конца строки. Потому что ты работаешь с AnsiString и оператором '+'.
Перепиши функции на char*. |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Эммм.... не получилось... Переписал вот так:
Может, где и наврал, но суть не в этом. В функцию, как я писал выше, передается два аргумента типа AnsiString, который нельзя преобразовать в char, как говорит компилер... |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
не пойдёт... даже не скомпилируется... нужно передавать длину строки P.S. Модератор: судя по всему, проблема не с алгоритмом, так что лучше перемещу это в Delphi... -------------------- qqq |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
P.S. А вот в Delphi этому точно нечего делать. Мы вроде тут С++ разбираем. И, соответственно, Borland C++ Builder, а не Delphi/Kylix.
Не могу понять, как написать функцию... Похоже, придется смириться с ошибкой с единицей. |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
У меня была такая проблема с шифрованием методом XOR, решил я ёё следующим способом - перед шифровкой символы '\0' заменял на '\r\m'(или что-то похожее) и все заработало как часы.
-------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
на автомате написал Delphi зато перенёс правильно -------------------- qqq |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 7 Всего: 67 |
Вот код xor шифрования, который я использовал для шифрования паролей пользователей многопользовательской игры в морской бой, защиты никакой канеш, но от "дурака" вполне приемлемо)))
работает без накладок)
-------------------- СУВ, Partizan. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
Мож уже и не надо , но
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| takedo |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: нет Всего: 3 |
Romikgy,
ничем по сути не отличается от
Прав был sergej.z про \0, решение предложил уже почти готовое Artemon :
А с char или String ты работаешь не суть важно. Лучше делать универсально, а универсально(чтобы везде не париться с char*) - это как Artemon предлагал. -------------------- я не гольфист - я хоккеист |
||||||
|
|||||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Вообще, информация в закодированном виде уже не String, а ByteArray или попросту Blob. Я бы не стал из него AnsiString делать. |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
так... вопрос: в качестве ключа может быть передан только один символ? Или несколько?
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
учитывая что ксориш ты один символ -- ключ длиннее байта -- изилишен.
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
_hunter, сорри, ты не прав. Здесь как раз защищённость зависит от длинны ключа.
Ключ в 1 байт означает 256 проверок и открытый текст у тебя. Ключ длинной в сам текст означает, что подобрать его можно будет только перебором. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
и как ты собираешся записать результат шифрования ключем длинной в текст в один байт?
если увеличивать длину ключа, нужно и размер одного элемента увеличивать -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
||||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Вот, оказывается, в чем проблема. По моему коду не шифруются те символы, которые содержатся в ключе!
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
||||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
ты, чтоли, последовательно ксорить предлагаеш? -- тоже вариант... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
но как ее решить-то?
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Писал без компилера так что может чтото не работать
|
|||
|
||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
Вот в этом коде, да и в других вариантох функции XOR-шифрования есть такая конструкция Key[x%Key.Length()+1]. Допустим вызываем функцию XOR_Crypt("abcdefgh","12345"). Идем по циклу. При x=4 получится что индекс строки Key будет равен 9, то есть Key[9], но ведь в Key всего 5 символов. Ошибка? |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Это с какого перепугу он будет 9?
|
||||
|
|||||
| Нитонисе |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 917 Регистрация: 5.11.2009 Репутация: 2 Всего: 2 |
точно) я почему-то подумал, что оператор % - это мы получаем дробную часть)
Это сообщение отредактировал(а) Нитонисе - 13.1.2010, 13:38 |
|||
|
||||
| NYX |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 165 Регистрация: 9.1.2007 Где: Россия, Москва Репутация: нет Всего: нет |
Очередное сори за подъем старой темы. Вообще XOR шифрование самое убогое
1 - строка A должна быть того же размера что и строка B 2 - символ Аn != Bn (иначе потеря данных) Лично я как то пытался сделать шифрование по XOR методу, но исключительно шифрование ограничивалось массивами суммой которых являлось одно число и сортировка массивов была разной. То есть например есть массив N элементы которого равны N1 = N0+1 Затем производил сортировку типа: x = N[i]; N[N[x]] += z; N[N[x]] -= z; (примерно) После чего строки мона было XOR'ить Но самый лучший метод который мне понравился, это когда заранее определенный массив состоящий из N1 = N0+1 изначально, сортировался по маске значений пароля, затем входящий поток шифровался простым return Table[InValue]; Это на мой взгляд и быстро и весьма широкие границы воображения открывает Это сообщение отредактировал(а) NYX - 20.1.2010, 14:44 --------------------
'long long long' is too long for GC |
|||
|
||||
| Жанерке |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 6.10.2011 Репутация: нет Всего: нет |
объясните плиз xor шифрование ааааа
вообще как шифровать слово Добавлено через 1 минуту и 23 секунды procedure TForm1.Button2Click(Sender: TObject); var FName: string; begin if OpenDialog1.Execute then begin FName := OpenDialog1.FileName; Memo1.Lines.LoadFromFile(FName); end; end; procedure TForm1.Button1Click(Sender: TObject); var j: integer; key, text, longkey, result: string; i: integer; toto, c: char; begin if edit1.Text='' then Application.MessageBox('Вкажіть код!', ä!','Помилка!') else begin if Memo1.Lines.Count=0 then Application.MessageBox('Відсутній код!','Помилка!!!') else begin key:=Edit1.Text; for j:=0 to Memo1.Lines.Count do begin text:=Memo1.Lines.Strings[j]; for i := 0 to (length(text) div length(key)) do longkey := longkey + key; for i := 1 to length(text) do begin toto := chr((ord(text[i]) xor ord(longkey[i]))); // XOR алгоритм result := result + toto; end; Memo1.Lines.Strings[j]:=result; end; //zapuskaesh codirovanie end; end; end; procedure TForm1.Button3Click(Sender: TObject); var FName: string; begin if SaveDialog1.Execute then begin FName := SaveDialog1.FileName; Memo1.Lines.savetofile(FName); end; end; end. че за программа |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: нет Всего: 10 |
Прежде объясните каким простите концом тот ваш код на Delphi (к тому же не оформленный как код) относится к С++ По теме http://lmgtfy.com/?q=xor+%D1%88%D0%B8%D1%8...%BD%D0%B8%D0%B5 |
|||
|
||||
| SVN74 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 5.5.2008 Где: Комсомольск на Дн епре Репутация: 11 Всего: 18 |
Простейший алгоритм кодирования…
Пример использования с проверкой переноса строк:
|
||||
|
|||||
| koroplysov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 29.8.2009 Репутация: нет Всего: нет |
Возьмите наш ГОСТ 28147-89 и шифруйте на здоровье. В режиме гаммирования получите текст той же длинны. И надежно и просто. Операции там примитивные:побитовое исключающее или, сложение по модулю 2 в степени 32(просто не учитывай перенос при сложении беззнаковых 32-битных), сдвиг в лево на 11 бит и таблица замен. Пишится легко как на C++ так и на ассемблере(вставка для билдера). Сейчас с собой нет кода, но если нужно, то с удовольствием поделюсь. Есть и другие алгоритмы.
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |