Lua Encryption

Lua Encryption

Lua is the scripting layer inside games (World of Warcraft-style mods, Roblox, Love2D), embedded devices, and nginx/OpenResty glue. Scripts ship as plain text unless you compile with Luac or pack them yourself—either way, curious players open the archive and read your strings.

Hiding admin commands, level-unlock tokens, or private server endpoints behind encrypted literals slows down the average dataminer. StringEncrypt gives you Lua that decrypts on load so your .lua files are less of a spoiler sheet.

String encryption supports both UNICODE and ANSI strings.

Official resources:

Lua Encryption (UNICODE Example)

Plaintext reference: StringEncrypt sample

-- encrypted with https://www.stringencrypt.com (v1.5.0) [Lua]
-- Requires Lua 5.3+ (bitwise operators: &, |, ~, <<, >>)
-- Unicode: utf8.char() for BMP code points (string.char only accepts 0..255)
-- myString = "StringEncrypt sample"
local myString = { 0x26A5, 0xA5D0, 0x46C5, 0x45C8, 0x19BE, 0x84A1, 0x45BF, 0x272A,
                   0xCCB7, 0x8B28, 0x406F, 0x56ED, 0xAD54, 0x5A96, 0x63B7, 0x7B18,
                   0x894C, 0x27A9, 0x99A2, 0x7918 }

local sdNAS = 0
for yEHvZ = 0, 20 - 1 do
  sdNAS = myString[yEHvZ + 1]
  for xYJjG = 1, 3 do
    sdNAS = (sdNAS ~ (((sdNAS & 0xFFFF) << 8) & 0xFFFF)) & 0xFFFF
    sdNAS = (sdNAS ~ ((sdNAS & 0xFFFF) >> 12)) & 0xFFFF
  end
  for fZbzM = 1, 3 do
    for psDhW = 1, 2 do
      for JeYNo = 1, 2 do
        sdNAS = ((((sdNAS & 0xFFFF) >> 8) | ((sdNAS & 0xFFFF) << 8)) & 0xFFFF)
      end
    end
  end
  for tioSy = 1, 2 do
    sdNAS = (((sdNAS & 0xFFFF) << (yEHvZ % 16)) | ((sdNAS & 0xFFFF) >> (16 - (yEHvZ % 16)))) & 0xFFFF
    for lwahB = 1, 4 do
      for GBVHF = 1, 3 do
        sdNAS = ((sdNAS & 0xFFFF) - 1) & 0xFFFF
        sdNAS = (sdNAS ~ yEHvZ) & 0xFFFF
      end
    end
    sdNAS = (sdNAS ~ (((sdNAS & 0xFFFF) << 8) & 0xFFFF)) & 0xFFFF
  end
  for pzHFh = 1, 2 do
    sdNAS = ((sdNAS & 0xFFFF) - 1) & 0xFFFF
    for wZtUS = 1, 4 do
      sdNAS = ((sdNAS & 0xFFFF) + 0xFA0E) & 0xFFFF
    end
    for UrmuJ = 1, 4 do
      for wYpSI = 1, 4 do
        sdNAS = ((sdNAS & 0xFFFF) - yEHvZ) & 0xFFFF
        sdNAS = (sdNAS ~ yEHvZ) & 0xFFFF
      end
    end
  end
  sdNAS = ((sdNAS & 0xFFFF) - 1) & 0xFFFF
  for YkfUL = 1, 4 do
    sdNAS = (((sdNAS & 0xFFFF) >> 15) | ((sdNAS & 0xFFFF) << 1)) & 0xFFFF
    for gTJSa = 1, 2 do
      sdNAS = (sdNAS ~ ((sdNAS & 0xFFFF) >> 8)) & 0xFFFF
      for ClPVD = 1, 3 do
        sdNAS = (sdNAS ~ yEHvZ) & 0xFFFF
        sdNAS = ((((sdNAS & 0xFFFF) >> 8) | ((sdNAS & 0xFFFF) << 8)) & 0xFFFF)
      end
      sdNAS = ((sdNAS & 0xFFFF) + 1) & 0xFFFF
    end
    for ExgXb = 1, 4 do
      for DTPkf = 1, 3 do
        sdNAS = ((sdNAS & 0xFFFF) - yEHvZ) & 0xFFFF
        sdNAS = (((sdNAS & 0xFFFF) >> (yEHvZ % 16)) | ((sdNAS & 0xFFFF) << (16 - (yEHvZ % 16)))) & 0xFFFF
        sdNAS = (((~(sdNAS & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF
      end
      for ZUxhb = 1, 2 do
        sdNAS = (sdNAS ~ ((sdNAS & 0xFFFF) >> 10)) & 0xFFFF
      end
    end
  end
  sdNAS = (((sdNAS & 0xFFFF) << (yEHvZ % 16)) | ((sdNAS & 0xFFFF) >> (16 - (yEHvZ % 16)))) & 0xFFFF
  sdNAS = ((sdNAS & 0xFFFF) - 0xBEE3) & 0xFFFF
  for BVeJu = 1, 2 do
    sdNAS = (((~(sdNAS & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF
    sdNAS = (((sdNAS & 0xFFFF) << 5) | ((sdNAS & 0xFFFF) >> 11)) & 0xFFFF
  end
  myString[yEHvZ + 1] = sdNAS
end

local vzVkF = {}
for KEORN = 1, #myString do
  vzVkF[KEORN] = utf8.char((myString[KEORN] & 0xFFFF))
end
myString = table.concat(vzVkF)


Lua Encryption (ANSI Example)

Plaintext reference: StringEncrypt sample

-- encrypted with https://www.stringencrypt.com (v1.5.0) [Lua]
-- Requires Lua 5.3+ (bitwise operators: &, |, ~, <<, >>)
-- -*- coding: WINDOWS-1250 -*-
-- myString = "StringEncrypt sample"
local myString = { 0x9C, 0x13, 0x80, 0x9B, 0xD8, 0x26, 0x01, 0x5F,
                   0x7A, 0x0F, 0xBA, 0x5A, 0x46, 0xA2, 0xFE, 0x76,
                   0xEE, 0x9B, 0xF8, 0x6A }

local YDWKr = 0
for UaWfB = 0, 20 - 1 do
  YDWKr = myString[UaWfB + 1]
  YDWKr = ((YDWKr & 0xFF) - UaWfB) & 0xFF
  YDWKr = (YDWKr ~ 0x93) & 0xFF
  for ElfxY = 1, 4 do
    YDWKr = ((YDWKr & 0xFF) + 1) & 0xFF
    YDWKr = ((YDWKr & 0xFF) - 0x03) & 0xFF
    YDWKr = ((((YDWKr & 0xFF) >> 4) | ((YDWKr & 0xFF) << 4)) & 0xFF)
  end
  for jnisa = 1, 4 do
    YDWKr = ((YDWKr & 0xFF) - UaWfB) & 0xFF
    for oaIHQ = 1, 2 do
      for ZDpdH = 1, 4 do
        YDWKr = ((YDWKr & 0xFF) - 1) & 0xFF
        YDWKr = ((YDWKr & 0xFF) - UaWfB) & 0xFF
      end
      YDWKr = (YDWKr ~ 0xAE) & 0xFF
      YDWKr = (((YDWKr & 0xFF) >> (UaWfB % 8)) | ((YDWKr & 0xFF) << (8 - (UaWfB % 8)))) & 0xFF
    end
    YDWKr = ((YDWKr & 0xFF) + 0x8B) & 0xFF
  end
  YDWKr = ((YDWKr ~ 0xFF) & 0xFF)
  for XeNHt = 1, 4 do
    YDWKr = ((YDWKr & 0xFF) - 0x45) & 0xFF
    YDWKr = ((((YDWKr & 0xFF) >> 4) | ((YDWKr & 0xFF) << 4)) & 0xFF)
    YDWKr = (((YDWKr & 0xFF) >> (UaWfB % 8)) | ((YDWKr & 0xFF) << (8 - (UaWfB % 8)))) & 0xFF
  end
  for IYGAJ = 1, 3 do
    for hBQuP = 1, 2 do
      for YoJxf = 1, 2 do
        YDWKr = ((YDWKr & 0xFF) - 1) & 0xFF
        YDWKr = (((~(YDWKr & 0xFF)) & 0xFF) + 1) & 0xFF
        YDWKr = (YDWKr ~ UaWfB) & 0xFF
      end
    end
    for xofNG = 1, 4 do
      for YCrXM = 1, 3 do
        YDWKr = ((YDWKr & 0xFF) + 1) & 0xFF
        YDWKr = (((YDWKr & 0xFF) << 4) | ((YDWKr & 0xFF) >> 4)) & 0xFF
        YDWKr = (((YDWKr & 0xFF) >> (UaWfB % 8)) | ((YDWKr & 0xFF) << (8 - (UaWfB % 8)))) & 0xFF
      end
      YDWKr = ((YDWKr & 0xFF) + UaWfB) & 0xFF
    end
  end
  YDWKr = ((YDWKr ~ 0xFF) & 0xFF)
  YDWKr = (YDWKr ~ UaWfB) & 0xFF
  YDWKr = (((~(YDWKr & 0xFF)) & 0xFF) + 1) & 0xFF
  YDWKr = (((YDWKr & 0xFF) >> 6) | ((YDWKr & 0xFF) << 2)) & 0xFF
  for pLQtg = 1, 4 do
    YDWKr = ((YDWKr & 0xFF) - 1) & 0xFF
    for vJDgZ = 1, 2 do
      YDWKr = ((((YDWKr & 0xFF) >> 4) | ((YDWKr & 0xFF) << 4)) & 0xFF)
      YDWKr = (((YDWKr & 0xFF) >> (UaWfB % 8)) | ((YDWKr & 0xFF) << (8 - (UaWfB % 8)))) & 0xFF
    end
    for bGnWu = 1, 2 do
      for DYHlC = 1, 2 do
        YDWKr = ((YDWKr & 0xFF) - 1) & 0xFF
        YDWKr = (((YDWKr & 0xFF) << 2) | ((YDWKr & 0xFF) >> 6)) & 0xFF
      end
      for rlFLf = 1, 4 do
        YDWKr = ((YDWKr & 0xFF) - UaWfB) & 0xFF
      end
    end
  end
  YDWKr = ((YDWKr & 0xFF) - 1) & 0xFF
  YDWKr = (((YDWKr & 0xFF) << (UaWfB % 8)) | ((YDWKr & 0xFF) >> (8 - (UaWfB % 8)))) & 0xFF
  myString[UaWfB + 1] = YDWKr
end

local KjGbO = {}
for dMoDG = 1, #myString do
  KjGbO[dMoDG] = string.char((myString[dMoDG] & 0xFF))
end
myString = table.concat(KjGbO)