local encstring={[0]='A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/',}
local decstring={}
for k,v in pairs(encstring) do
decstring[v:byte()]=k
end
local byte=str
if type(str)=='string' then
byte={str:byte(1,#str)}
end
if type(byte)~='table' then
return ''
end
local result={}
local len=#byte
local number=len%3
local num=0
for i=1,len,3 do
num=((byte[i] or 0)<<16)+((byte[i+1] or 0)<<8)+((byte[i+2] or 0)<<0)
for j=3,0,-1 do
local tmp=num>>(j*6)
table.insert(result,encstring[tmp&0x3f])
end
end
if number>0 then
for i=3-number,1,-1 do
result[#result-i+1]='='
end
end
return table.concat(result)
end)
"
private string DecFunc = "(
function(str)
local encstring={[0]='A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/',}
local decstring={}
for k,v in pairs(encstring) do
decstring[v:byte()]=k
end
local byte=str
if type(str)=='string' then
byte={str:byte(1,#str)}
end
if type(byte)~='table' then
return ''
end
local result={}
local len=#byte
local num=0
local number=0
local data=str:gsub('=',function()
number=number+1
end)
if len%4~=0 then
return ''
end
for i=1,len,4 do
num=((decstring[byte[i]] or 0)<<18)+((decstring[byte[i+1]] or 0)<<12)+((decstring[byte[i+2]] or 0)<<6)+((decstring[byte[i+3]] or 0)<<0)
for j=2,0,-1 do
local tmp=num>>(j*8)
table.insert(result,tmp&0xff)
end
end
local max=#result
if number>0 then
for i=number,1,-1 do
result[max-i+1]=nil
end
end
return string.char(table.unpack(result))
end)
"
endglobals
function Base64EncString takes string s returns string
local string func = EncFunc + "('" + s + "')"
local string result = EXExecuteScript( func )
return result
endfunction
function Base64DecString takes string s returns string
local string func = DecFunc + "('" + s + "')"
local string result = EXExecuteScript( func )
return result
endfunction
endlibrary
复制代码
下面是测试代码:
function B2S takes boolean bool return string
if bool then
return "true"
endif
return "false"
endfunction
function Trig_Base_64Actions takes nothing returns nothing
local string ChatString = GetEventPlayerChatString( )
local string EncString = ""
local string DecString = ""
if EncString != "" or EncString != null then
call BJDebugMsg( "Base64 加密字符串 -> " + ChatString )
set EncString = Base64EncString( ChatString )
call BJDebugMsg( "Base64 加码 -> " + EncString )
set DecString = Base64DecString( EncString )
call BJDebugMsg( "Base64 解码 -> " + DecString )
call BJDebugMsg( "是否成功 -> " + B2S( ChatString == DecString ) )
endif
endfunction
//===========================================================================
function InitTrig_Base_64 takes nothing returns nothing
set gg_trg_Base_64 = CreateTrigger()
call TriggerRegisterPlayerChatEvent(gg_trg_Base_64, Player(0), "", true)
call TriggerAddAction(gg_trg_Base_64, function Trig_Base_64Actions)
endfunction