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

Lua шифрование

Вопрос

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

function tobin(num)
    local tmp = {}
    repeat
        tmp[#tmp+1]=num%2
        num = math.floor(num/2)
    until num==0
    return table.concat(tmp):reverse()
end
 
local function main()
 io.input("number.txt")
 
while true do
 
  local val = io.read("*number")
  if val == nil then break end
  local n = {}
  n = tobin(val)
  print(tostring(n))
 end  
 
local a = {}
io.input("shfr.txt")
while true do
  local line = io.read("*line")
  if line == nil then break end
  x,y = string.match(line,"([01]+) (%a)")
                               
  a[x]=y
end
-- отладочный вывод
for k,v in pairs(a) do
  print("["..k.."]="..v)
end
 
 
io.close()
end
main()

вот что получилось, есть ли какие-то встроенные функции для сравнения чисел n и ключа таблицы, и замены v на значения ключа таблицы?

Изменено пользователем WinYourmind

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Возможно тебе будет полезна эта библиотека, для перевода систем счисления.

Там можно конвертировать любую систему счисления в десятичную и наоборот. Или десятичную сразу в 256-ричную, которую тебе надо. (но придётся пополнять алфавит до 256 символов, чтобы работать с такой системой)

 

P.S. В библиотеки не оптимизированы алгоритмы (например, его как то через байт код можно оптимизировать)

Зато есть две универсальные функции.

И нету промежуточных функций, вроде перевода двоичной системы в 16-ричную с более быстрым алгоритмом перевода.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Начнём с того, что хранить двочиные числа надо... как ни странно, в обычных числах Луа. Последняя умеет в битовые операции.

Кроме того, есть string.char (из числа от 0 до 255 делает символ с аналогичным кодом) и string.byte (из данного символа возвращает значение первого байта строки: число от 0 до 255).

 

Напоследок, вот так для меня выглядит пост:

M6TXBpz.png

Я не собираюсь даже пытаться разобраться в этом цветастом месиве. Просьба использовать кнопки очистить форматирование aeWdsrX.png и тег кода: jmFygnF.png.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

есть ли какие-то встроенные функции для сравнения чисел n и ключа таблицы, и замены v на значения ключа таблицы?

Не совсем понял, что на что надо менять, но допустим есть переменная n и таблица t  с ключами k и соответствующими им значениями v. Необходимо найти в таблице ключ k, равный n, и присвоить n значение v, соответствующее ключу k.

t={a=1,b=2,c=3}
n="b"
if t[n] then n=t[n] end

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
...

Это уже наглость, человек просит помочь в решении задачи, ты молодец, решил, но и другим дай. Я здесь не видел слов, "дайте готовую библиотеку".

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не понимаю, к чему тут двоичный код. Почему числа нельзя сразу в символы преобразовывать? Или топикстартер нашими силами лабу по информатике делает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не совсем понял, что на что надо менять, но допустим есть переменная n и таблица t  с ключами k и соответствующими им значениями v. Необходимо найти в таблице ключ k, равный n, и присвоить n значение v, соответствующее ключу k.

 

да так только, вот n хранит у меня несколько двоичных чисел, и дальше мне нужно сравнить их с ключом таблицы, и если они равны то изменить n на значения ключа

{

   [10110111] = A

   ........

}

 

  1. local val = io.read("*number")  
    if val == nil then break end  
    local n = {}  
    n = tobin(val)  
    print(tostring(n)) 
    end  
Изменено пользователем WinYourmind

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

это не шифрование, любой символ итак состоит из бит. string.char(io.read("*n") or fail()) достаточно, зачем велосипедить

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость Kartze
Начнём с того, что хранить двочиные числа надо... как ни странно, в обычных числах Луа. Последняя умеет в битовые операции.

Кроме того, есть string.char (из числа от 0 до 255 делает символ с аналогичным кодом) и string.byte (из данного символа возвращает значение первого байта строки: число от 0 до 255).

 

Напоследок, вот так для меня выглядит пост:

M6TXBpz.png

Я не собираюсь даже пытаться разобраться в этом цветастом месиве. Просьба использовать кнопки очистить форматирование aeWdsrX.png и тег кода: jmFygnF.png.

Финя, ну так чем парень-то виноват, что не юзает темную тему?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Финя, ну так чем парень-то виноват, что не юзает темную тему?)

 

Он виноват в том, что в посте каша в форматировании.

Сейчас хоть тег "код" поставил. А сначала вообще жесть была. Про кастомный шрифт и нафиг не нужный серый фон я уже не говорю.

Изменено пользователем Totoro

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Он виноват в том, что в посте каша в форматировании.

Сейчас хоть тег "код" поставил. А сначала вообще жесть была. Про кастомный шрифт и нафиг не нужный серый фон я уже не говорю.

Исправил он:3, но текст всё так-же белый, на белом фоне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...