Перейти к содержимому

Zer0Galaxy

Гуру
  • Публикации

    1 220
  • Зарегистрирован

  • Посещение

  • Победитель дней

    189

Сообщения, опубликованные пользователем Zer0Galaxy


  1. Пробую в эмуляторе CCEmu

    [ATTACH]127[/ATTACH]

    На скриншоте видно, что пытаюсь отправить символ с кодом 195, а принимаю - 239. Почему так, не знаю

    На всякий случай реализовал алгоритм шифрования, у которого на выходе строка содержащая только шестнадцатеричные цифры. В результате зашифрованная строка вдвое длиннее незашифрованной

    post-6-14160784013042_thumb.jpg


  2. Обнаружил неприятную особенность сети rednet. Оказывается символы с кодом больше 127 передаются некорректно. Тоже касается и записи на диск. Это надо учитывать при разработке алгоритма шифрования.


  3. когда ты будешь подключаться к роутеру нужно будет ввести логин пароль

    А зачем это роутеру? Если я решу сделать Craftnet платным, тогда понятно. Но Craftnet платным не будет пока я в нем участвую.

    Может кто нибудь захочет стать провайдером и продавать трафик, тогда пусть делает


  4. Да, действительно. При такой схеме можно только продублировать перехваченное сообщение, но не подделать. Чтобы и дублирование было невозможно нужно в хеш вставлять еще какую нибудь соль, например случайно сгенерированное число, которое генерируется сервером для каждого сеанса связи.

    Но я не об этом. Я о том, что если работать не в направлении шифрования сообщений, а в направлении электронной подписи?


  5. Можно сделать систему логин пароль к роутеру , а данные логина и пароля шифровать и передавать на роутер,нужно что бы роутер выдал компьютеру уникальный адрес (физический)

    Не совсем понятно. Поясни на примере, пожалуйста.

  6. А по поводу первого поста.

    1. Нужно разобраться с блоком Cryptographic Accelerator.

    С Cryptographic Accelerator разбирался когда то. Вроде, ничего сложного. Могу освежить. Помню, там строки для шифрования ограничены по длине. Если предполагается, что пользователь будет работать со своего компьютера, а не с банковского терминала, то этот вариант не приемлем т.к. нуб вряд ли сможет скрафтить Cryptographic Accelerator, даже если бы он крафтился.

    2. Придумать свой алгоритм шифрования

    Когда то поднимал тему шифрования открытым ключом. Вопрос передачи ключа при этом снимается, но я не смог решить задачу эффективной генерации пары ключей. Если использовать закрытый ключ, то его можно генерировать один раз для каждого пользователя, а хранить на RFID-карте. Карту же выдавать при личном посещении пользователем банка.

    3. Может как то использовать возможность сети интернет и по нему передать ключи.

    Лично я противник всего, что выходит за игровой сервер. Исключение делаю только для pastebinа и то не всегда

  7. Если речь идет только о работе банковской системы, то может нет необходимости шифровать сообщения? Ну узнает Ева, что Алиса купила два алмаза. И что? Тут важнее идентификация абонента, что бы никто не покупал алмазики за чужой счет.

    Предлагаю рассмотреть следующий вариант. Предположим, пользователь User имеет пароль Password и хочет передать сообщение Message на сервер. Клиентская программа формирует строку Message+H(Message+User+Password), которая и передается по незащищенному каналу. Где H() - хеш-функция. Обратите внимание, сообщение передается незашифрованным, но сопровождается подписью, подделать которую невозможно не зная пароля.


  8. ... можно подумать, как сделать подобие удаленного заказа и доставки товара на дом ...

    Интересная мысль. Но сразу вопрос. Как будет вести себя черепаха при пролете областей не покрытых чанклоадерами?

  9. Дмитрий, можешь указать карту покрытия приблизительно (концентрическими кольцами) или еще как-то?

    Выкладываю карту покрытия на сегодняшний день

    [ATTACH]122[/ATTACH]

    Большая тонкая окружность - планируемое покрытие

    post-6-14160784011211_thumb.gif

    • Нравится 1

  10. Не до конца разобрался с механизмом обмена сообщениями. Вот, что удалось понять, поправь если не так

    1. Чат построен на основе одного единственного компьютера, к которому прикручена фиговина "openperipheral_glassesbridge"

    2. Каждый участник чата должен иметь на носу супер очки, связанные с этой фиговиной при помощи ПКМ

    3. Для отсылки сообщения в GoogleGlass Chat необходимо в обычный чат послать сообщение, начинающееся с $$. После чего, каждый у кого очки, это сообщение увидит. Причем в обычный чат сообщение не попадет.

    4. Расстояние от пользователя до компьютера значения не имеет


  11. Быстрей расширяй сеть! а то на 1000 блоков от спавна не берет...

    В какую сторону расширять? Не хотелось бы строить сеть там, где она никому ненужна.

    И еще есть идея сделать проводной инет в смысле написать такойже роутер только с одной стороны локальная сеть а с другой CraftNet

    Без проблем. Только это будет скорее не роутер, а мост между проводной и беспроводной сетью

  12. Но лично я в подобных случаях не заморачиваюсь с пустыми захватами, а использую функцию 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.

    • Нравится 5

  13. Вернемся к строке 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
    После внесенных изменений код должен работать более корректно.
    • Нравится 2

  14. Уточню перечень спецсимволов, используемых в шаблонах

    . (точка) - заменяет любой символ.

    %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 может содержать любые символы кроме пробела.

    • Нравится 4
×
×
  • Создать...