Advertisement
DOGGYWOOF

Doggy OS RedNet message decoder

Jan 9th, 2025 (edited)
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.23 KB | None | 0 0
  1. -- RedNet Decoder with Enhanced Info, Auto Decrypt & Auto Save to One File
  2. local modemSide = "top" -- Change to the side where your modem is connected
  3. rednet.open(modemSide)
  4.  
  5. -- Global settings
  6. local settings = {
  7. autoSave = false, -- Auto save decrypted messages
  8. autoDecrypt = false -- Auto decrypt incoming RedNet messages
  9. }
  10.  
  11. -- Define the default key file for auto decryption
  12. local defaultKeyFile = "decryption_key.txt" -- The key file for auto-decrypt
  13. local decryptedMessagesFile = "decrypted_messages.txt" -- The file where all messages will be saved
  14.  
  15. -- Function to read the decryption key from a file
  16. local function readKeyFromFile(fileName)
  17. if not fs.exists(fileName) then
  18. error("File does not exist: " .. fileName)
  19. end
  20. local file = fs.open(fileName, "r")
  21. local key = file.readAll()
  22. file.close()
  23. return key:gsub("%s+", "") -- Trim whitespace
  24. end
  25.  
  26. -- Function to decrypt a message using XOR
  27. local function decryptMessage(encryptedMessage, key)
  28. local decryptedMessage = ""
  29. local encryptionKey = {} -- Store the encryption key for display
  30. for i = 1, #encryptedMessage do
  31. local encChar = string.byte(encryptedMessage:sub(i, i))
  32. local keyChar = string.byte(key:sub(((i - 1) % #key) + 1))
  33. decryptedMessage = decryptedMessage .. string.char(bit.bxor(encChar, keyChar))
  34. table.insert(encryptionKey, keyChar) -- Store the XOR key characters
  35. end
  36. return decryptedMessage, encryptionKey
  37. end
  38.  
  39. -- Function to auto save the decrypted message to a single file
  40. local function autoSaveMessage(decryptedMessage, senderId)
  41. if settings.autoSave then
  42. local timestamp = os.date("%Y-%m-%d_%H-%M-%S")
  43. local file = fs.open(decryptedMessagesFile, "a") -- Open file in append mode
  44. file.write("\n--------------------------------------------------\n")
  45. file.write("Timestamp: " .. os.date("%Y-%m-%d %H:%M:%S") .. "\n")
  46. file.write("Sender ID: " .. senderId .. "\n")
  47. file.write("Decrypted Message: " .. decryptedMessage .. "\n")
  48. file.write("--------------------------------------------------\n")
  49. file.close()
  50. print("Message saved automatically to", decryptedMessagesFile)
  51. end
  52. end
  53.  
  54. -- Function to handle RedNet messages
  55. local function handleRedNetMessages()
  56. print("\n--------------------------------------------------")
  57. print("Waiting for a RedNet message... Press 'q' to quit.")
  58. print("--------------------------------------------------\n")
  59.  
  60. while true do
  61. local senderId, encryptedMessage = rednet.receive()
  62.  
  63. -- Show detailed information about the message
  64. print("\n--------------------------------------------------")
  65. print("Encrypted message received from ID:", senderId)
  66. print("Timestamp: " .. os.date("%Y-%m-%d %H:%M:%S"))
  67. print("Encrypted Message: " .. encryptedMessage)
  68. print("--------------------------------------------------\n")
  69.  
  70. -- Handle decryption
  71. local decryptedMessage
  72. local keyFileUsed
  73. local encryptionKey
  74.  
  75. if settings.autoDecrypt then
  76. -- Use the predefined key file for decryption
  77. local key
  78. local success, err = pcall(function()
  79. key = readKeyFromFile(defaultKeyFile)
  80. end)
  81. if not success then
  82. print("Error reading key:", err)
  83. return
  84. end
  85. decryptedMessage, encryptionKey = decryptMessage(encryptedMessage, key)
  86. keyFileUsed = defaultKeyFile
  87. print("Decrypted Message: " .. decryptedMessage)
  88. else
  89. -- If autoDecrypt is off, ask for file name
  90. print("Auto Decrypt is disabled. Please enter the key file name for decryption:")
  91. local keyFileName = read()
  92. local key
  93. if fs.exists(keyFileName) then
  94. key = readKeyFromFile(keyFileName)
  95. decryptedMessage, encryptionKey = decryptMessage(encryptedMessage, key)
  96. keyFileUsed = keyFileName
  97. print("Decrypted Message: " .. decryptedMessage)
  98. else
  99. print("Error: Key file does not exist.")
  100. return
  101. end
  102. end
  103.  
  104. -- Show additional information after decryption
  105. print("\n--------------------------------------------------")
  106. print("Decryption Complete:")
  107. print("Original Encrypted Message: " .. encryptedMessage)
  108. print("Decrypted Message: " .. decryptedMessage)
  109. print("Sender ID: " .. senderId)
  110. print("Timestamp: " .. os.date("%Y-%m-%d %H:%M:%S"))
  111. print("Decryption Key File Used: " .. keyFileUsed)
  112. print("Encryption Key Used: " .. table.concat(encryptionKey, ", "))
  113. print("--------------------------------------------------\n")
  114.  
  115. -- Auto Save if enabled
  116. autoSaveMessage(decryptedMessage, senderId)
  117. end
  118. end
  119.  
  120. -- Main Settings Menu for configuring options
  121. local function settingsMenu()
  122. while true do
  123. print("\n--------------------------------------------------")
  124. print("Settings Menu:")
  125. print("1. Toggle Auto Save (Currently: " .. (settings.autoSave and "On" or "Off") .. ")")
  126. print("2. Toggle Auto Decrypt (Currently: " .. (settings.autoDecrypt and "On" or "Off") .. ")")
  127. print("3. Set Decryption Key File (Current: " .. defaultKeyFile .. ")")
  128. print("4. Back to Main Menu")
  129. print("--------------------------------------------------")
  130. print("Select an option (1-4):")
  131. local choice = tonumber(read())
  132.  
  133. if choice == 1 then
  134. settings.autoSave = not settings.autoSave
  135. print("Auto Save is now " .. (settings.autoSave and "enabled" or "disabled"))
  136. elseif choice == 2 then
  137. settings.autoDecrypt = not settings.autoDecrypt
  138. print("Auto Decrypt is now " .. (settings.autoDecrypt and "enabled" or "disabled"))
  139. elseif choice == 3 then
  140. print("Enter the new decryption key file path:")
  141. defaultKeyFile = read()
  142. print("Decryption key file is now set to: " .. defaultKeyFile)
  143. elseif choice == 4 then
  144. break
  145. else
  146. print("Invalid choice, please try again.")
  147. end
  148. end
  149. end
  150.  
  151. -- Main Menu for navigating the program
  152. local function mainMenu()
  153. while true do
  154. print("\n--------------------------------------------------")
  155. print("RedNet Decoder Main Menu")
  156. print("1. Start RedNet - Receive and Decode Messages")
  157. print("2. Settings - Configure Auto Save and Auto Decrypt")
  158. print("3. Exit")
  159. print("--------------------------------------------------")
  160. print("Please select an option (1-3):")
  161. local choice = tonumber(read())
  162.  
  163. if choice == 1 then
  164. handleRedNetMessages()
  165. elseif choice == 2 then
  166. settingsMenu()
  167. elseif choice == 3 then
  168. print("Exiting program...")
  169. break
  170. else
  171. print("Invalid choice, please try again.")
  172. end
  173. end
  174. end
  175.  
  176. -- Run the main menu
  177. mainMenu()
  178.  
  179. rednet.close()
  180. print("RedNet Decoder has stopped.")
  181.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement