daily pastebin goal
4%
SHARE
TWEET

Cryptednote.lua

HeroBrine1st Jul 6th, 2018 (edited) 85 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local crypt = require("crypt")
  2. local component = require("component")
  3. local gpu = component.gpu
  4. local fs = require("filesystem")
  5. local term = require("term")
  6. local event = require("event")
  7. local dir = "/usr/note/"
  8. local args = {...}
  9. local tmp = {}
  10.  
  11. function writeFile(path,data)
  12.     local handle, reason = io.open(path,"w")
  13.     if not handle then return nil, reason end
  14.     handle:write(data)
  15.     handle:close()
  16.     return true
  17. end
  18.  
  19. function readFile(path)
  20.     local handle, reason = io.open(path,"r")
  21.     if not handle then return nil, reason end
  22.     local buffer = ""
  23.     repeat
  24.         local data,reason = handle:read()
  25.         if data then buffer = buffer .. data end
  26.         if not data and reason then handle:close() return nil, reason end
  27.     until not data
  28.     handle:close()
  29.     return buffer
  30. end
  31.  
  32. function edit(path,rewrite)
  33.     if not fs.exists(path) or rewrite then writeFile(path,crypt.crypt("--ваша новая заметка--",tmp.keys)) end
  34.     local tmpname = os.tmpname()
  35.     local buffer = readFile(path)
  36.     local uncrypted = crypt.decrypt(buffer,tmp.keys)
  37.     writeFile(tmpname,uncrypted)
  38.     os.execute("edit " .. tmpname)
  39.     local buffer1 = readFile(tmpname)
  40.     local crypted = crypt.crypt(buffer1,tmp.keys)
  41.     writeFile(path,crypted)
  42. end
  43.  
  44. fs.makeDirectory(dir)
  45.  
  46. if fs.exists(fs.concat(dir,"password.md5")) then
  47.     tmp.md5 = readFile(fs.concat(dir,"password.md5"))
  48. end
  49. local str = "Введите пароль: "
  50. if not tmp.md5 then str = "Введите новый пароль:" end
  51. local crtd = false
  52. while not tmp.keys do
  53.     io.write(str)
  54.     local psk = term.read(_,_,_,"•")
  55.     print("Вычисление контрольной суммы")
  56.     local checksum = crypt.md5(psk)
  57.     if tmp.md5 then
  58.         print("Сравнение контрольных сумм")
  59.         if tmp.md5 == crypt.md5(psk) then
  60.             print("Создание таблицы ключей")
  61.             tmp.keys = crypt.getkey(psk)
  62.         else
  63.             print("Неверный пароль.")
  64.             os.sleep(0.5)
  65.             os.exit()
  66.         end
  67.     else
  68.         print("Форматирование и создание контрольной суммы")
  69.         for file in fs.list(dir) do
  70.             print("Удаление " .. file)
  71.             fs.remove(fs.concat(dir,file))
  72.         end
  73.         tmp.md5 = crypt.md5(psk)
  74.         writeFile(fs.concat(dir,"password.md5"),tmp.md5)
  75.         print("Создание таблицы ключей")
  76.         tmp.keys = crypt.getkey(psk)
  77.         crtd = true
  78.     end
  79.     print("Таблица ключей создана.")
  80.     psk = nil
  81.     os.sleep(0.5)
  82. end
  83. if crtd then
  84.     print("Добро пожаловать в программу cryptednote")
  85.     print("В целях безопасности названия ваших файлов будут защищены хеш-функцией MD5, а их содержимое будет зашифровано паролем, введенном при запуске программы.")
  86.     print("Не передавайте пароль третьим лицам. В случае угрозы безопасности или невозможности ввода пароля удалите файл " .. dir .. "password.md5 , запомнив его содержимое")
  87.     print("Клик для продолжения")
  88.     event.pull("touch")
  89. end
  90. local pathmd5 = crypt.md5(args[1])
  91. local path = fs.concat(dir,pathmd5)
  92. if args[2] == "--rewrite" or args[2] == "-w" then edit(path,true) else edit(path) end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top