Zer0Galaxy
Гуру-
Публикации
1 220 -
Зарегистрирован
-
Посещение
-
Победитель дней
189
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя Zer0Galaxy
-
Да, действительно. При такой схеме можно только продублировать перехваченное сообщение, но не подделать. Чтобы и дублирование было невозможно нужно в хеш вставлять еще какую нибудь соль, например случайно сгенерированное число, которое генерируется сервером для каждого сеанса связи. Но я не об этом. Я о том, что если работать не в направлении шифрования сообщений, а в направлении электронной подписи?
-
А по поводу первого поста. С Cryptographic Accelerator разбирался когда то. Вроде, ничего сложного. Могу освежить. Помню, там строки для шифрования ограничены по длине. Если предполагается, что пользователь будет работать со своего компьютера, а не с банковского терминала, то этот вариант не приемлем т.к. нуб вряд ли сможет скрафтить Cryptographic Accelerator, даже если бы он крафтился. Когда то поднимал тему шифрования открытым ключом. Вопрос передачи ключа при этом снимается, но я не смог решить задачу эффективной генерации пары ключей. Если использовать закрытый ключ, то его можно генерировать один раз для каждого пользователя, а хранить на RFID-карте. Карту же выдавать при личном посещении пользователем банка. Лично я противник всего, что выходит за игровой сервер. Исключение делаю только для pastebinа и то не всегда
-
Если речь идет только о работе банковской системы, то может нет необходимости шифровать сообщения? Ну узнает Ева, что Алиса купила два алмаза. И что? Тут важнее идентификация абонента, что бы никто не покупал алмазики за чужой счет. Предлагаю рассмотреть следующий вариант. Предположим, пользователь User имеет пароль Password и хочет передать сообщение Message на сервер. Клиентская программа формирует строку Message+H(Message+User+Password), которая и передается по незащищенному каналу. Где H() - хеш-функция. Обратите внимание, сообщение передается незашифрованным, но сопровождается подписью, подделать которую невозможно не зная пароля.
-
А кто нибудь пробовал ОС с СС связывать?
-
Пол стака иридия и одна солнечная панелька и гравик твои. Идет?
-
Интересная мысль. Но сразу вопрос. Как будет вести себя черепаха при пролете областей не покрытых чанклоадерами?
-
Т.е. компьютер может читать чат, но сам писать туда не может? Жаль. А то можно было бы глобальную сеть между мирами организовать.
-
А можно ли при помощи этой штуки организовать связь между двумя компьютерами?
-
Выкладываю карту покрытия на сегодняшний день[ATTACH]122[/ATTACH] Большая тонкая окружность - планируемое покрытие
-
Craftnet расширено на северо-запад
-
Не до конца разобрался с механизмом обмена сообщениями. Вот, что удалось понять, поправь если не так 1. Чат построен на основе одного единственного компьютера, к которому прикручена фиговина "openperipheral_glassesbridge" 2. Каждый участник чата должен иметь на носу супер очки, связанные с этой фиговиной при помощи ПКМ 3. Для отсылки сообщения в GoogleGlass Chat необходимо в обычный чат послать сообщение, начинающееся с $$. После чего, каждый у кого очки, это сообщение увидит. Причем в обычный чат сообщение не попадет. 4. Расстояние от пользователя до компьютера значения не имеет
-
Не знаю когда смогу зайти на сервер. Укажи координаты. Можно в личку
-
В какую сторону расширять? Не хотелось бы строить сеть там, где она никому ненужна. Без проблем. Только это будет скорее не роутер, а мост между проводной и беспроводной сетью
-
Но лично я в подобных случаях не заморачиваюсь с пустыми захватами, а использую функцию gmatch. Она возвращает функцию-итератор, которая при каждом очередном вызове ищет следующее совпадение шаблона в строке. Функция возвращает функцию! Звучит ужасно, но выглядит всё не так страшно, если применить ее в операторе for in s='x=10 y=11 z=12' -- исходная строка t={} -- таблица, в которой будем хранить результат for key, val in s:gmatch('(%w+)=(%d+)') do t[key]=tonumber(val) -- помещаем результат в таблицу end for key, val in pairs(t) do print(key,'=',val) endОператор for in выполнится столько раз, сколько раз будет найден шаблон '(%w+)=(%d+)' в исходной строке. Причем переменные key и val всякий раз будут принимать очередные захваченные значения - имя и значение переменной.Думаю, теперь мы готовы к тому, что бы написать собственные аналоги функций serialize и unserialize.
-
Вернемся к строке s='x=10 y=11 z=12', с которой мы начинали знакомство с шаблонами. Мы видели, что извлечь из нее значения переменных можно так: x,y,z=s:match('x=(%d+)%s*y=(%d+)%s*z=(%d+)')или так: x=s:match('x=(%d+)') y=s:match('y=(%d+)') z=s:match('z=(%d+)')Но как быть, если количество, содержащихся в строке переменных очень большое, скажем, несколько тысяч? Неужели их все придется прописывать вручную? Нельзя ли это как то автоматизировать? Последний пример из предыдущего поста подсказывает, что можно. Мы ведь можем захватывать не только значения, но и имена переменных. А полученные значения размещать в таблице где имя переменной будет именем элемента таблицы. Для простоты будем считать, что имена могут состоять из букв или цифр, а значения только из цифр. Пропишем шаблон для поиска одной переменной и заключим его в цикл для поиска остальных. s='x=10 y=11 z=12' -- исходная строка t={} -- таблица, в которой будем хранить результат for i=1,3 do key, val=s:match('(%w+)=(%d+)') -- извлекаем имя и значение t[key]=tonumber(val) -- помещаем результат в таблицу end for key, val in pairs(t) do -- выводим результат print(key,'=',val) endПриведенный пример кода загружает из исходной строки имена и значения переменной в таблицу t. Однако, если мы попытаемся этот код выполнить, то увидим, что в результате таблица t будет содержать только одно значение x=10. Произошло так потому, что функция match всегда начинает поиск совпадений с начала строки. Всегда, если ей не указать с какого места нужно начинать поиск. Оказывается match имеет еще один необязательный параметр, указывающий с какой позиции строки следует начинать поиск. Его можно узнать вставив в шаблон пустой захват (). Такой захват вернет позицию символа в строке, следующего за найденной подстрокой. s='x=10 y=11 z=12' -- исходная строка t={} -- таблица, в которой будем хранить результат n=1 -- начинаем поиск с начала строки for i=1,3 do key, val, n=s:match('(%w+)=(%d+)()',n) -- извлекаем имя и значение -- пустой захват ставим в конце шаблона, чтобы от вернул позицию символа, следующего за найденной подстрокой t[key]=tonumber(val) -- помещаем результат в таблицу end for key, val in pairs(t) do print(key,'=',val) endПосле внесенных изменений код должен работать более корректно.
-
Уточню перечень спецсимволов, используемых в шаблонах . (точка) - заменяет любой символ. %a --- все буквы. %c --- все управляющие символы. (Символы с кодом от 0 до 31, которые не имеют графического представления) %d --- все цифры. %l --- все строчные буквы. %p --- все знаки препинания. %s --- все пробелы (символы с кодом 9, 10, 12, 13, 32). %u --- все заглавные буквы. %w --- все алфавитно-цифровые символы (буквы и цифры). %x --- все шестнадцатеричные цифры (цифры и буквы a-f, A-F). %z --- символ с кодом 0. Использование заглавной буквы в качестве спецсимвола меняет смысл на противоположный. Например %A - все символы кроме букв, %S - все печатные символы Так же хочу добавить еще два спецсимвола ^ и $. Если шаблон начинается с символа ^ или заканчивается символом $, то искаться такой шаблон будет соответственно в начале или в конце исходной строки. Несколько примеров использования шаблонов: '[%+%-]?%d+' - ищет целое число в десятичном формате '0x%x+' - число в шестнадцатеричном формате s= s:match('^%s*(.*)%s*$') - удаляет из строки начальные и конечные пробелы key, val = s:match('([%a_][%w_]*)%s*=%s*(%S+)') - разбирает конструкцию типа key = val, причем имя key должно содержать буквы, цифры или символ подчеркивания и начинаться с буквы или подчеркивания, а val может содержать любые символы кроме пробела.
-
На lua вряд ли получится. Match, всё же на джаве писано.
-
Разобрался. Pastebin работает если интернет плату подключить
-
А как же новое и непознанное? Я поковырялся в моде. Вроде прога pastebin есть. Но как ее запустить?
-
Каким образом можно залить прогу на компьютер? Способы, работающие на СС не стреляют. Неужели всё ручками набирать?
-
Шаблоны, которые я рассматривал до сих пор, возвращали строку, требующую дополнительной обработки. В самом деле, если функция match вернула строку 'y=11', то из этой строки необходимо выделить символы, соответствующие значению переменной. Например, вызвать функцию match еще раз. А нельзя ли обойтись одним вызовом? Оказывается можно. Делается это при помощи структуры, называемой захват (capture). Захват оформляется в виде группы символов, заключенных в круглые скобки. Если шаблон содержит захват, то он возвращает не всю совпавшую подстроку, а только захваченное значение, т.е. символы, соответствующие символам захвата. Пример: s:match('y=(%d+)') вернет строку не 'y=11', а '11' Обращаю внимание, match всегда возвращает строку, даже если вы ищите число. Так что от преобразования типа tonumber никуда не деться. Захватов в шаблоне может быть несколько. В этом случае match возвращает столько значений сколько захватов присутствует в шаблоне. Это позволяет искать сразу несколько значений в строке за один раз. Например: s='x=10 y=11 z=12' x,y,z=s:match('x=(%d+)%s*y=(%d+)%s*z=(%d+)') Тут нужно быть внимательным. Во-первых, не забываем про разделители, если они есть (в примере разделителями являются символы пробел - %s). Во-вторых, следует помнить, что шаблон стреляет только тогда, когда совпал целиком. Т.е. если из трех захватов, приведенных в примере, найдены два, а третий не найден, результатом работы функции будет nil и все три переменные x,y,z будут не определены. Поэтому, если вы не уверены, что в исходной строке присутствуют все искомые значения, воспользуйтесь тремя разными поисками. Или же функцией gmatch, о которой я расскажу чуть позже.
-
Символы и спецсимволы в шаблоне можно объединять в наборы (сеты). Для этого несколько символов заключаются в квадратные скобки. Набор замещает собой один из символов, входящих в его состав. Например, вот такой набор [%d%p] замещает цифру или знак препинания. А такой [_%w] - букву, цифру или символ подчеркивания. Порядок символов, в котором они идут в наборе значения не имеет. Теперь мы можем найти в строке значение переменной y даже если оно будет отрицательным или сопровождаться знаком + s:match('y=[%+%-]?%d+') Знаки % перед + и - говорят о том, что это не спецсимволы, а обычные + и - Знак ? после набора указывает на то, что + или - могут отсутствовать. А вот такой шаблон s:match('y=[%+%-%d]%d*%.?%d*') позволит найти число в формате с десятичной точкой. Если набор начинается с символа ^ , то такой набор интерпретируется как "всё кроме указанных символов".
-
Вы наверняка подумали, а зачем искать в строке значение переменной y, если для поиска нужно знать значение этой переменной? Как быть если значение y заранее не известно? Чаще всего так и происходит. Тогда в шаблон вместо цифр необходимо подставить специальные символы. В нашем случае это %d. s:match('y=%d%d') Спецсимволы в шаблоне заменяют собой другие символы. Спецсимволов припоминаю несколько: %a - заменяют все буквы %d - все цифры %w - буквы и цифры %p - знаки препинания %s - пробел .(точка) - любой символ %. - символ "точка" Спецсимволов чуть больше, но остальные не столь актуальны. Надеюсь, понятно, что функция s:match('y=%d%d') будет искать в строке s подстроку состоящую из символов 'y=' и еще каких то двух цифр. Именно эту подстроку она и вернет. Если найдет. А вдруг мы не знаем из скольки символов состоит значение переменной y. В этом случае на помощь приходят модификаторы. Модификаторы это такие спецсимволы, которые изменяют количество символа за которым стоят в шаблоне. Вот такие я знаю модификаторы: + - соответствует одному или более повторений символа; * - соответствует нулю или более повторений; - - соответствует нулю или более повторений. В отличии от модификатора * возвращает строку минимально возможной длины, но так, что бы она соответствовала шаблону; ? - соответствует нулю или одному символу. Если мы знаем, что значение переменной y состоит из какого то количества цифр (но не менее одной), следует применить модификатор + s:match('y=%d+') Эта функция будет искать в строке s подстроку состоящую из символов 'y=' и какого то количества цифр. Причем вернет подстроку максимально возможной длины, т.е. 'y=' и все цифры следующие за знаком равенства. Продолжение следует ...
