FFGFlash

api/md5

Sep 25th, 2021 (edited)
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.46 KB | None | 0 0
  1. local ff,consts=tonumber("ffffffff",16),{}
  2. string.gsub([[ d76aa478 e8c7b756 242070db c1bdceee f57c0faf 4787c62a a8304613 fd469501 698098d8 8b44f7af ffff5bb1 895cd7be 6b901122 fd987193 a679438e 49b40821 f61e2562 c040b340 265e5a51 e9b6c7aa d62f105d 02441453 d8a1e681 e7d3fbc8 21e1cde6 c33707d6 f4d50d87 455a14ed a9e3e905 fcefa3f8 676f02d9 8d2a4c8a fffa3942 8771f681 6d9d6122 fde5380c a4beea44 4bdecfa9 f6bb4b60 bebfbc70 289b7ec6 eaa127fa d4ef3085 04881d05 d9d4d039 e6db99e5 1fa27cf8 c4ac5665 f4292244 432aff97 ab9423a7 fc93a039 655b59c3 8f0ccc92 ffeff47d 85845dd1 6fa87e4f fe2ce6e0 a3014314 4e0811a1 f7537e82 bd3af235 2ad7d2bb eb86d391 67452301 efcdab89 98badcfe 10325476 ]],"(%w+)",function(s) table.insert(consts,tonumber(s,16)) end)
  3. local function transform(A,B,C,D,X)
  4.   local f=function(x,y,z) return bit.bor(bit.band(x,y),bit.band(-x-1,z)) end
  5.   local g=function(x,y,z) return bit.bor(bit.band(x,z),bit.band(y,-z-1)) end
  6.   local h=function(x,y,z) return bit.bxor(x,bit.bxor(y,z)) end
  7.   local i=function(x,y,z) return bit.bxor(y,bit.bor(x,-z-1)) end
  8.   local z=function(f,a,b,c,d,x,s,ac)
  9.     a=bit.band(a+f(b,c,d)+x+ac,ff)
  10.     return bit.bor(bit.blshift(bit.band(a,bit.brshift(ff,s)),s),bit.brshift(a,32-s))+b
  11.   end
  12.   local a,b,c,d=A,B,C,D
  13.   local t=consts
  14.   a=z(f,a,b,c,d,X[0],7,t[1])
  15.   d=z(f,d,a,b,c,X[1],12,t[2])
  16.   c=z(f,c,d,a,b,X[2],17,t[3])
  17.   b=z(f,b,c,d,a,X[3],22,t[4])
  18.   a=z(f,a,b,c,d,X[4],7,t[5])
  19.   d=z(f,d,a,b,c,X[5],12,t[6])
  20.   c=z(f,c,d,a,b,X[6],17,t[7])
  21.   b=z(f,b,c,d,a,X[7],22,t[8])
  22.   a=z(f,a,b,c,d,X[8],7,t[9])
  23.   d=z(f,d,a,b,c,X[9],12,t[10])
  24.   c=z(f,c,d,a,b,X[10],17,t[11])
  25.   b=z(f,b,c,d,a,X[11],22,t[12])
  26.   a=z(f,a,b,c,d,X[12],7,t[13])
  27.   d=z(f,d,a,b,c,X[13],12,t[14])
  28.   c=z(f,c,d,a,b,X[14],17,t[15])
  29.   b=z(f,b,c,d,a,X[15],22,t[16])
  30.   a=z(g,a,b,c,d,X[1],5,t[17])
  31.   d=z(g,d,a,b,c,X[6],9,t[18])
  32.   c=z(g,c,d,a,b,X[11],14,t[19])
  33.   b=z(g,b,c,d,a,X[0],20,t[20])
  34.   a=z(g,a,b,c,d,X[5],5,t[21])
  35.   d=z(g,d,a,b,c,X[10],9,t[22])
  36.   c=z(g,c,d,a,b,X[15],14,t[23])
  37.   b=z(g,b,c,d,a,X[4],20,t[24])
  38.   a=z(g,a,b,c,d,X[9],5,t[25])
  39.   d=z(g,d,a,b,c,X[14],9,t[26])
  40.   c=z(g,c,d,a,b,X[3],14,t[27])
  41.   b=z(g,b,c,d,a,X[8],20,t[28])
  42.   a=z(g,a,b,c,d,X[13],5,t[29])
  43.   d=z(g,d,a,b,c,X[2],9,t[30])
  44.   c=z(g,c,d,a,b,X[7],14,t[31])
  45.   b=z(g,b,c,d,a,X[12],20,t[32])
  46.   a=z(h,a,b,c,d,X[5],4,t[33])
  47.   d=z(h,d,a,b,c,X[8],11,t[34])
  48.   c=z(h,c,d,a,b,X[11],16,t[35])
  49.   b=z(h,b,c,d,a,X[14],23,t[36])
  50.   a=z(h,a,b,c,d,X[1],4,t[37])
  51.   d=z(h,d,a,b,c,X[4],11,t[38])
  52.   c=z(h,c,d,a,b,X[7],16,t[39])
  53.   b=z(h,b,c,d,a,X[10],23,t[40])
  54.   a=z(h,a,b,c,d,X[13],4,t[41])
  55.   d=z(h,d,a,b,c,X[0],11,t[42])
  56.   c=z(h,c,d,a,b,X[3],16,t[43])
  57.   b=z(h,b,c,d,a,X[6],23,t[44])
  58.   a=z(h,a,b,c,d,X[9],4,t[45])
  59.   d=z(h,d,a,b,c,X[12],11,t[46])
  60.   c=z(h,c,d,a,b,X[15],16,t[47])
  61.   b=z(h,b,c,d,a,X[2],23,t[48])
  62.   a=z(i,a,b,c,d,X[0],6,t[49])
  63.   d=z(i,d,a,b,c,X[7],10,t[50])
  64.   c=z(i,c,d,a,b,X[14],15,t[51])
  65.   b=z(i,b,c,d,a,X[5],21,t[52])
  66.   a=z(i,a,b,c,d,X[12],6,t[53])
  67.   d=z(i,d,a,b,c,X[3],10,t[54])
  68.   c=z(i,c,d,a,b,X[10],15,t[55])
  69.   b=z(i,b,c,d,a,X[1],21,t[56])
  70.   a=z(i,a,b,c,d,X[8],6,t[57])
  71.   d=z(i,d,a,b,c,X[15],10,t[58])
  72.   c=z(i,c,d,a,b,X[6],15,t[59])
  73.   b=z(i,b,c,d,a,X[13],21,t[60])
  74.   a=z(i,a,b,c,d,X[4],6,t[61])
  75.   d=z(i,d,a,b,c,X[11],10,t[62])
  76.   c=z(i,c,d,a,b,X[2],15,t[63])
  77.   b=z(i,b,c,d,a,X[9],21,t[64])
  78.   return A+a,B+b,C+c,D+d
  79. end
  80. local function leIstr(i)
  81.   local f=function(s) return string.char(bit.band(bit.brshift(i,s),255)) end
  82.   return f(0)..f(8)..f(16)..f(24)
  83. end
  84. local function beInt(s)
  85.   local v=0
  86.   for i=1,string.len(s) do v=v*256+string.byte(s,i) end
  87.   return v
  88. end
  89. local function leInt(s)
  90.   local v=0
  91.   for i=string.len(s),1,-1 do v=v*256+string.byte(s,i) end
  92.   return v
  93. end
  94. local function leStrCuts(s,...)
  95.   local o,r,args=1,{},{...}
  96.   for i=1,#args do
  97.     table.insert(r,leInt(string.sub(s,o,o+args[i]-1)))
  98.     o=o+args[i]
  99.   end
  100.   return r
  101. end
  102. function calc(s)
  103.   local msgLen=string.len(s)
  104.   local padLen=56-msgLen%64
  105.   if msgLen%64>56 then padLen=padLen+64 end
  106.   if padLen==0 then padLen=64 end
  107.   s=s..string.char(128)..string.rep(string.char(0),padLen-1)
  108.   s=s..leIstr(8*msgLen)..leIstr(0)
  109.   assert(string.len(s)%64==0)
  110.   local t=consts
  111.   local a,b,c,d=t[65],t[66],t[67],t[68]
  112.   for i=1,string.len(s),64 do
  113.     local X=leStrCuts(string.sub(s,i,i+63),4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4)
  114.     assert(#X==16)
  115.     X[0]=table.remove(X,1)
  116.     a,b,c,d=transform(a,b,c,d,X)
  117.   end
  118.   local swap=function(w) return beInt(leIstr(w)) end
  119.   return string.format("%08x%08x%08x%08x",swap(a),swap(b),swap(c),swap(d))
  120. end
Add Comment
Please, Sign In to add comment