利用GG进行base64加密,不喜勿喷,友情提示:不能直接使用
----------------------------------------打上花火----------------------------------------
1.首先我们需要简单科普一下base64是什么:
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
Base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了Base64的各种“变种”。为统一和规范化Base64的输出,Base62x被视为无符号化的改进版本。
【中文名】 基于64个可打印字符来表示二进制数据 外文名 base64 属 性 编码方式 应 用 用于传输8Bit字节代码 定 义 8Bit字节代码的编码方式之一 可用于 在HTTP环境下传递较长的标识信息 特 性 Base64编码具有不可读性
标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
为解决此问题,可采用一种用于URL的改进Base64编码,它在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。
此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。
Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
2.那么知道了工作原理,我们就可以开始写加密,那么加密原理又是什么呢?请看以下代码:
local function encodeBase64(source_str)
local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
local s64 = ''
local str = source_str
while #str > 0 do
local bytes_num = 0
local buf = 0
for byte_cnt=1,3 do
buf = (buf * 256)
if #str > 0 then
buf = buf + string.byte(str, 1, 1)
str = string.sub(str, 2)
bytes_num = bytes_num + 1
end
end
for group_cnt=1,(bytes_num+1) do
local b64char = math.fmod(math.floor(buf/262144), 64) + 1
s64 = s64 .. string.sub(b64chars, b64char, b64char)
buf = buf * 64
end
for fill_cnt=1,(3-bytes_num) do
s64 = s64 .. '='
end
end
return s64
end
3.从上面我们得到了思路,开始写支持GG执行的代码,让GG兼容这个工作:
baseEecrypt = gg.prompt({[1]="输入代码(复制粘贴即可)"}, { },{[1]="text"}) -- 利用prompt框来进行操作
if baseEecrypt == nil then -- 如果没有选择或取消选择
gg.setVisible(true) -- 弹出界面
os.exit() -- 结束
end -- 到这里已经结束了,也就就不存在运行bug一说
操作项执行效果如图1-1:
4.好,那么有了操作项我们就可以把base64的加密原理写入(写在操作项的后面,执行体的前面),这里不再复述
5.接下来我们写执行体,什么是执行体呢?总体来说就是让代码运作起来的东西,也叫做工作体
这里我们将会用到全局变量,替换,还有简单的文件写入方式
废话不多说,看代码:
JMDM = baseEecrypt[1] -- 设置变量
setcodes = encodeBase64(JMDM) -- 设置执行体
setcodes = string.gsub(setcodes, "'", "'") -- 逐字替换
file = io.open("/storage/emulated/0/base64加密结果.txt", "w") -- 写出路径,如果有原文件将会覆盖写出
file:write(setcodes) -- 写入文件
xpcall(print(setcodes),error) --这里是打印出结果,方便查看,如果有错误将会抛出
file:close() -- 结束写入
base_src = loadfile("/storage/emulated/0/base64加密结果.txt") -- 加载
pcall(base_src) -- 保护调用加载
好了,该干的我们已经做完了,是不是觉得很简单?
下面我们来开始实战测试
例:我们输入:ABCDEFGHIJKLMNOPQRSTUVWXYZ
加密效果如图1-2,1-3
总结:以上就是利用GG来进行base64加密的教程
解码原理:其实解码原理也很简单,逆推即可,这里也不多复述
如果小伙伴们怕被别人秒解怎么办?问题不大,你只需要按照我给出的思路将base64和RC4写在一起即可,不要忘了写密码哦,也不要随意的把密码给出去,如果有能力的可以加入XOR来进行简单的异或操作。
Thats All.