mirror of
https://github.com/sys4-fr/server-nalc.git
synced 2025-01-27 02:00:29 +01:00
update md5.lua (md5sum bug, wrong/no md5 with big data)--> fix news don't show when updated
This commit is contained in:
parent
3752bf2e64
commit
2394483dc9
@ -1,5 +1,5 @@
|
|||||||
local md5 = {
|
local md5 = {
|
||||||
_VERSION = "md5.lua 1.0.2",
|
_VERSION = "md5.lua 1.1.0",
|
||||||
_DESCRIPTION = "MD5 computation in Lua (5.1-3, LuaJIT)",
|
_DESCRIPTION = "MD5 computation in Lua (5.1-3, LuaJIT)",
|
||||||
_URL = "https://github.com/kikito/md5.lua",
|
_URL = "https://github.com/kikito/md5.lua",
|
||||||
_LICENSE = [[
|
_LICENSE = [[
|
||||||
@ -232,15 +232,6 @@ end
|
|||||||
|
|
||||||
local swap = function (w) return str2bei(lei2str(w)) end
|
local swap = function (w) return str2bei(lei2str(w)) end
|
||||||
|
|
||||||
local function hex2binaryaux(hexval)
|
|
||||||
return char(tonumber(hexval, 16))
|
|
||||||
end
|
|
||||||
|
|
||||||
local function hex2binary(hex)
|
|
||||||
local result, _ = hex:gsub('..', hex2binaryaux)
|
|
||||||
return result
|
|
||||||
end
|
|
||||||
|
|
||||||
-- An MD5 mplementation in Lua, requires bitlib (hacked to use LuaBit from above, ugh)
|
-- An MD5 mplementation in Lua, requires bitlib (hacked to use LuaBit from above, ugh)
|
||||||
-- 10/02/2001 jcw@equi4.com
|
-- 10/02/2001 jcw@equi4.com
|
||||||
|
|
||||||
@ -268,8 +259,8 @@ local f=function (x,y,z) return bit_or(bit_and(x,y),bit_and(-x-1,z)) end
|
|||||||
local g=function (x,y,z) return bit_or(bit_and(x,z),bit_and(y,-z-1)) end
|
local g=function (x,y,z) return bit_or(bit_and(x,z),bit_and(y,-z-1)) end
|
||||||
local h=function (x,y,z) return bit_xor(x,bit_xor(y,z)) end
|
local h=function (x,y,z) return bit_xor(x,bit_xor(y,z)) end
|
||||||
local i=function (x,y,z) return bit_xor(y,bit_or(x,-z-1)) end
|
local i=function (x,y,z) return bit_xor(y,bit_or(x,-z-1)) end
|
||||||
local z=function (f,a,b,c,d,x,s,ac)
|
local z=function (ff,a,b,c,d,x,s,ac)
|
||||||
a=bit_and(a+f(b,c,d)+x+ac,0xFFFFFFFF)
|
a=bit_and(a+ff(b,c,d)+x+ac,0xFFFFFFFF)
|
||||||
-- be *very* careful that left shift does not cause rounding!
|
-- be *very* careful that left shift does not cause rounding!
|
||||||
return bit_or(bit_lshift(bit_and(a,bit_rshift(0xFFFFFFFF,s)),s),bit_rshift(a,32-s))+b
|
return bit_or(bit_lshift(bit_and(a,bit_rshift(0xFFFFFFFF,s)),s),bit_rshift(a,32-s))+b
|
||||||
end
|
end
|
||||||
@ -346,38 +337,60 @@ local function transform(A,B,C,D,X)
|
|||||||
c=z(i,c,d,a,b,X[ 2],15,t[63])
|
c=z(i,c,d,a,b,X[ 2],15,t[63])
|
||||||
b=z(i,b,c,d,a,X[ 9],21,t[64])
|
b=z(i,b,c,d,a,X[ 9],21,t[64])
|
||||||
|
|
||||||
return A+a,B+b,C+c,D+d
|
return bit_and(A+a,0xFFFFFFFF),bit_and(B+b,0xFFFFFFFF),
|
||||||
|
bit_and(C+c,0xFFFFFFFF),bit_and(D+d,0xFFFFFFFF)
|
||||||
end
|
end
|
||||||
|
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
|
|
||||||
function md5.sumhexa(s)
|
local function md5_update(self, s)
|
||||||
local msgLen = #s
|
self.pos = self.pos + #s
|
||||||
|
s = self.buf .. s
|
||||||
|
for ii = 1, #s - 63, 64 do
|
||||||
|
local X = cut_le_str(sub(s,ii,ii+63),4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4)
|
||||||
|
assert(#X == 16)
|
||||||
|
X[0] = table.remove(X,1) -- zero based!
|
||||||
|
self.a,self.b,self.c,self.d = transform(self.a,self.b,self.c,self.d,X)
|
||||||
|
end
|
||||||
|
self.buf = sub(s, math.floor(#s/64)*64 + 1, #s)
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
local function md5_finish(self)
|
||||||
|
local msgLen = self.pos
|
||||||
local padLen = 56 - msgLen % 64
|
local padLen = 56 - msgLen % 64
|
||||||
|
|
||||||
if msgLen % 64 > 56 then padLen = padLen + 64 end
|
if msgLen % 64 > 56 then padLen = padLen + 64 end
|
||||||
|
|
||||||
if padLen == 0 then padLen = 64 end
|
if padLen == 0 then padLen = 64 end
|
||||||
|
|
||||||
s = s .. char(128) .. rep(char(0),padLen-1) .. lei2str(8*msgLen) .. lei2str(0)
|
local s = char(128) .. rep(char(0),padLen-1) .. lei2str(bit_and(8*msgLen, 0xFFFFFFFF)) .. lei2str(math.floor(msgLen/0x20000000))
|
||||||
|
md5_update(self, s)
|
||||||
|
|
||||||
assert(#s % 64 == 0)
|
assert(self.pos % 64 == 0)
|
||||||
|
return lei2str(self.a) .. lei2str(self.b) .. lei2str(self.c) .. lei2str(self.d)
|
||||||
|
end
|
||||||
|
|
||||||
local t = CONSTS
|
----------------------------------------------------------------
|
||||||
local a,b,c,d = t[65],t[66],t[67],t[68]
|
|
||||||
|
|
||||||
for i=1,#s,64 do
|
function md5.new()
|
||||||
local X = cut_le_str(sub(s,i,i+63),4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4)
|
return { a = CONSTS[65], b = CONSTS[66], c = CONSTS[67], d = CONSTS[68],
|
||||||
assert(#X == 16)
|
pos = 0,
|
||||||
X[0] = table.remove(X,1) -- zero based!
|
buf = '',
|
||||||
a,b,c,d = transform(a,b,c,d,X)
|
update = md5_update,
|
||||||
end
|
finish = md5_finish }
|
||||||
|
end
|
||||||
|
|
||||||
return format("%08x%08x%08x%08x",swap(a),swap(b),swap(c),swap(d))
|
function md5.tohex(s)
|
||||||
|
return format("%08x%08x%08x%08x", str2bei(sub(s, 1, 4)), str2bei(sub(s, 5, 8)), str2bei(sub(s, 9, 12)), str2bei(sub(s, 13, 16)))
|
||||||
end
|
end
|
||||||
|
|
||||||
function md5.sum(s)
|
function md5.sum(s)
|
||||||
return hex2binary(md5.sumhexa(s))
|
return md5.new():update(s):finish()
|
||||||
|
end
|
||||||
|
|
||||||
|
function md5.sumhexa(s)
|
||||||
|
return md5.tohex(md5.sum(s))
|
||||||
end
|
end
|
||||||
|
|
||||||
return md5
|
return md5
|
||||||
|
Loading…
Reference in New Issue
Block a user