lua的MD5实现方法:

local md5 = {_VERSION     = "md5.lua 1.1.0",_DESCRIPTION = "MD5 computation in Lua (5.1-3, LuaJIT)",_URL         = "https://github.com/kikito/md5.lua"
}-- bit lib implementionslocal char, byte, format, rep, sub =string.char, string.byte, string.format, string.rep, string.sub
local bit_or, bit_and, bit_not, bit_xor, bit_rshift, bit_lshiftlocal ok, bit = pcall(require, 'bit')
if ok thenbit_or, bit_and, bit_not, bit_xor, bit_rshift, bit_lshift = bit.bor, bit.band, bit.bnot, bit.bxor, bit.rshift, bit.lshift
elseok, bit = pcall(require, 'bit32')if ok thenbit_not = bit.bnotlocal tobit = function(n)return n <= 0x7fffffff and n or -(bit_not(n) + 1)endlocal normalize = function(f)return function(a,b) return tobit(f(tobit(a), tobit(b))) endendbit_or, bit_and, bit_xor = normalize(bit.bor), normalize(bit.band), normalize(bit.bxor)bit_rshift, bit_lshift = normalize(bit.rshift), normalize(bit.lshift)elselocal function tbl2number(tbl)local result = 0local power = 1for i = 1, #tbl doresult = result + tbl[i] * powerpower = power * 2endreturn resultendlocal function expand(t1, t2)local big, small = t1, t2if(#big < #small) thenbig, small = small, bigend-- expand smallfor i = #small + 1, #big dosmall[i] = 0endendlocal to_bits -- needs to be declared before bit_notbit_not = function(n)local tbl = to_bits(n)local size = math.max(#tbl, 32)for i = 1, size doif(tbl[i] == 1) thentbl[i] = 0elsetbl[i] = 1endendreturn tbl2number(tbl)end-- defined as local aboveto_bits = function (n)if(n < 0) then-- negativereturn to_bits(bit_not(math.abs(n)) + 1)end-- to bits tablelocal tbl = {}local cnt = 1local lastwhile n > 0 dolast      = n % 2tbl[cnt]  = lastn         = (n-last)/2cnt       = cnt + 1endreturn tblendbit_or = function(m, n)local tbl_m = to_bits(m)local tbl_n = to_bits(n)expand(tbl_m, tbl_n)local tbl = {}for i = 1, #tbl_m doif(tbl_m[i]== 0 and tbl_n[i] == 0) thentbl[i] = 0elsetbl[i] = 1endendreturn tbl2number(tbl)endbit_and = function(m, n)local tbl_m = to_bits(m)local tbl_n = to_bits(n)expand(tbl_m, tbl_n)local tbl = {}for i = 1, #tbl_m doif(tbl_m[i]== 0 or tbl_n[i] == 0) thentbl[i] = 0elsetbl[i] = 1endendreturn tbl2number(tbl)endbit_xor = function(m, n)local tbl_m = to_bits(m)local tbl_n = to_bits(n)expand(tbl_m, tbl_n)local tbl = {}for i = 1, #tbl_m doif(tbl_m[i] ~= tbl_n[i]) thentbl[i] = 1elsetbl[i] = 0endendreturn tbl2number(tbl)endbit_rshift = function(n, bits)local high_bit = 0if(n < 0) then-- negativen = bit_not(math.abs(n)) + 1high_bit = 0x80000000endlocal floor = math.floorfor i=1, bits don = n/2n = bit_or(floor(n), high_bit)endreturn floor(n)endbit_lshift = function(n, bits)if(n < 0) then-- negativen = bit_not(math.abs(n)) + 1endfor i=1, bits don = n*2endreturn bit_and(n, 0xFFFFFFFF)endend
end-- convert little-endian 32-bit int to a 4-char string
local function lei2str(i)local f=function (s) return char( bit_and( bit_rshift(i, s), 255)) endreturn f(0)..f(8)..f(16)..f(24)
end-- convert raw string to big-endian int
local function str2bei(s)local v=0for i=1, #s dov = v * 256 + byte(s, i)endreturn v
end-- convert raw string to little-endian int
local function str2lei(s)local v=0for i = #s,1,-1 dov = v*256 + byte(s, i)endreturn v
end-- cut up a string in little-endian ints of given size
local function cut_le_str(s,...)local o, r = 1, {}local args = {...}for i=1, #args dotable.insert(r, str2lei(sub(s, o, o + args[i] - 1)))o = o + args[i]endreturn r
endlocal swap = function (w) return str2bei(lei2str(w)) end-- An MD5 mplementation in Lua, requires bitlib (hacked to use LuaBit from above, ugh)
-- 10/02/2001 jcw@equi4.comlocal CONSTS = {0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391,0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476
}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 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 z=function (ff,a,b,c,d,x,s,ac)a=bit_and(a+ff(b,c,d)+x+ac,0xFFFFFFFF)-- 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
endlocal function transform(A,B,C,D,X)local a,b,c,d=A,B,C,Dlocal t=CONSTSa=z(f,a,b,c,d,X[ 0], 7,t[ 1])d=z(f,d,a,b,c,X[ 1],12,t[ 2])c=z(f,c,d,a,b,X[ 2],17,t[ 3])b=z(f,b,c,d,a,X[ 3],22,t[ 4])a=z(f,a,b,c,d,X[ 4], 7,t[ 5])d=z(f,d,a,b,c,X[ 5],12,t[ 6])c=z(f,c,d,a,b,X[ 6],17,t[ 7])b=z(f,b,c,d,a,X[ 7],22,t[ 8])a=z(f,a,b,c,d,X[ 8], 7,t[ 9])d=z(f,d,a,b,c,X[ 9],12,t[10])c=z(f,c,d,a,b,X[10],17,t[11])b=z(f,b,c,d,a,X[11],22,t[12])a=z(f,a,b,c,d,X[12], 7,t[13])d=z(f,d,a,b,c,X[13],12,t[14])c=z(f,c,d,a,b,X[14],17,t[15])b=z(f,b,c,d,a,X[15],22,t[16])a=z(g,a,b,c,d,X[ 1], 5,t[17])d=z(g,d,a,b,c,X[ 6], 9,t[18])c=z(g,c,d,a,b,X[11],14,t[19])b=z(g,b,c,d,a,X[ 0],20,t[20])a=z(g,a,b,c,d,X[ 5], 5,t[21])d=z(g,d,a,b,c,X[10], 9,t[22])c=z(g,c,d,a,b,X[15],14,t[23])b=z(g,b,c,d,a,X[ 4],20,t[24])a=z(g,a,b,c,d,X[ 9], 5,t[25])d=z(g,d,a,b,c,X[14], 9,t[26])c=z(g,c,d,a,b,X[ 3],14,t[27])b=z(g,b,c,d,a,X[ 8],20,t[28])a=z(g,a,b,c,d,X[13], 5,t[29])d=z(g,d,a,b,c,X[ 2], 9,t[30])c=z(g,c,d,a,b,X[ 7],14,t[31])b=z(g,b,c,d,a,X[12],20,t[32])a=z(h,a,b,c,d,X[ 5], 4,t[33])d=z(h,d,a,b,c,X[ 8],11,t[34])c=z(h,c,d,a,b,X[11],16,t[35])b=z(h,b,c,d,a,X[14],23,t[36])a=z(h,a,b,c,d,X[ 1], 4,t[37])d=z(h,d,a,b,c,X[ 4],11,t[38])c=z(h,c,d,a,b,X[ 7],16,t[39])b=z(h,b,c,d,a,X[10],23,t[40])a=z(h,a,b,c,d,X[13], 4,t[41])d=z(h,d,a,b,c,X[ 0],11,t[42])c=z(h,c,d,a,b,X[ 3],16,t[43])b=z(h,b,c,d,a,X[ 6],23,t[44])a=z(h,a,b,c,d,X[ 9], 4,t[45])d=z(h,d,a,b,c,X[12],11,t[46])c=z(h,c,d,a,b,X[15],16,t[47])b=z(h,b,c,d,a,X[ 2],23,t[48])a=z(i,a,b,c,d,X[ 0], 6,t[49])d=z(i,d,a,b,c,X[ 7],10,t[50])c=z(i,c,d,a,b,X[14],15,t[51])b=z(i,b,c,d,a,X[ 5],21,t[52])a=z(i,a,b,c,d,X[12], 6,t[53])d=z(i,d,a,b,c,X[ 3],10,t[54])c=z(i,c,d,a,b,X[10],15,t[55])b=z(i,b,c,d,a,X[ 1],21,t[56])a=z(i,a,b,c,d,X[ 8], 6,t[57])d=z(i,d,a,b,c,X[15],10,t[58])c=z(i,c,d,a,b,X[ 6],15,t[59])b=z(i,b,c,d,a,X[13],21,t[60])a=z(i,a,b,c,d,X[ 4], 6,t[61])d=z(i,d,a,b,c,X[11],10,t[62])c=z(i,c,d,a,b,X[ 2],15,t[63])b=z(i,b,c,d,a,X[ 9],21,t[64])return bit_and(A+a,0xFFFFFFFF),bit_and(B+b,0xFFFFFFFF),bit_and(C+c,0xFFFFFFFF),bit_and(D+d,0xFFFFFFFF)
end----------------------------------------------------------------local function md5_update(self, s)self.pos = self.pos + #ss = self.buf .. sfor ii = 1, #s - 63, 64 dolocal 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)endself.buf = sub(s, math.floor(#s/64)*64 + 1, #s)return self
endlocal function md5_finish(self)local msgLen = self.poslocal padLen = 56 - msgLen % 64if msgLen % 64 > 56 then padLen = padLen + 64 endif padLen == 0 then padLen = 64 endlocal s = char(128) .. rep(char(0),padLen-1) .. lei2str(bit_and(8*msgLen, 0xFFFFFFFF)) .. lei2str(math.floor(msgLen/0x20000000))md5_update(self, s)assert(self.pos % 64 == 0)return lei2str(self.a) .. lei2str(self.b) .. lei2str(self.c) .. lei2str(self.d)
end----------------------------------------------------------------function md5.new()return { a = CONSTS[65], b = CONSTS[66], c = CONSTS[67], d = CONSTS[68],pos = 0,buf = '',update = md5_update,finish = md5_finish }
endfunction 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)))
endfunction md5.sum(s)return md5.new():update(s):finish()
endfunction md5.sumhexa(s)return md5.tohex(md5.sum(s))
endreturn md5

TestMD5.lua

local md5 = require('md5')
local inputvalue="admin"
local y = md5.sumhexa(inputvalue)
print(inputvalue.." is encrypted by MD5 ---------------------->  "..y)
inputvalue="www.hackyin.com"
y = md5.sumhexa(inputvalue)
print(inputvalue.." is encrypted by MD5 ---------------------->  "..y)
inputvalue="hackyin"
y = md5.sumhexa(inputvalue)
print(inputvalue.." is encrypted by MD5 ---------------------->  "..y)

TestTime.lua

function FormatTime(intputTime)local time=""if intputTime<3600 thenlocal m = math.modf(intputTime/60)local s = math.fmod(intputTime, 60)time= string.format("%dm %ds", m, s)elseif intputTime>3600 and intputTime <86400 thenlocal h = math.modf(intputTime/3600)local m = math.modf(math.fmod(intputTime, 3600)/60)time= string.format("%dh %dm", h, m)else local d = math.modf(intputTime/86400)local h = math.modf(math.fmod(intputTime, 86400)/3600)time= string.format("%dd %dh", d, h)endreturn time
endfunction SendItem:FormatTime(intputTime)                                           if type(intputTime)=="number" and intputTime > 0 thenif intputTime < 3600 thenlocal m = math.modf(intputTime/60)local s = math.fmod(intputTime, 60)return string.format("%dm %ds", mins, seconds)elseif intputTime > 3600 and intputTime < 86400 thenlocal h = math.modf(intputTime/3600)local m = math.modf(math.fmod(intputTime, 3600)/60)return  string.format("%dh %dm", h, m)else local d = math.modf(intputTime/86400)local h = math.modf(math.fmod(intputTime, 86400)/3600)return string.format("%dd %dh", d, h)endendreturn nilendprint("---------小于1小时 -------------------->  "..FormatTime(3500))local num=3500+3600*3
print("---------小于1天,大于小时 -------------------->  "..FormatTime(num))num=3500+3600*30
print("---------大于1天  小时 -------------------->  "..FormatTime(num))--HH:MM:SS
function FormatTimeToHMS(intputTime)local h = math.floor(intputTime / 3600)local m = math.floor((intputTime % 3600) / 60)local s = math.floor((intputTime % 3600) % 60)return string.format("%dh %dm %ds", h, m,s)
end
print("-----------HH:MM:SS -------------------->  "..FormatTimeToHMS(86732))----MM:SS
function FormatTimeToMS(intputTime)local m = math.modf(intputTime/60)local s = math.fmod(intputTime, 60)return string.format("%dm %ds", m,s)endprint("-----------MM:SS -------------------->  "..FormatTimeToMS(3434))

[Lua工具类]Lua 中MD5的实现相关推荐

  1. java arrays方法_Java工具类Arrays中不得不知的常用方法

    原标题:Java工具类Arrays中不得不知的常用方法 Arrays 数组操作集数组转List ---asList 这个被"普遍"称为数组转List的方法,可能是Arrays内大家 ...

  2. android 字体像素转换工具类_Android中px与dip,sp与dip等的转换工具类

    Android中px与dip,sp与dip等的转换工具类 功能 通常在代码中设置组件或文字大小只能用px,通过这个工具类我们可以把dip(dp)或sp为单位的值转换为以px为单位的值而保证大小不变.方 ...

  3. java web 文件上传工具类_JavaWeb中实现文件上传的方式有哪些?

    上回我们说了下文件下载的方式有哪些,这次我们从不同的环境下简单来说说文件上传的方式有哪些. 文件上传的方式Servlet2.5 方式 Servlet3.0 方式 SpringMVC 方式 案例实操 S ...

  4. java 对象 转换 工具类_Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)...

    通用excel与对象相互转换的工具类 前言:最近开发需要一个Excel批量导入或者导出的功能,之前用过poi-ooxml开发过一个导入的工具类,正好蹭着这次机会,把工具类的功能进行完善. 使用说明: ...

  5. android 开发工具类,Android中常用开发工具类—持续更新...

    一.自定义ActionBar public class ActionBarTool { public static void setActionBarLayout(Activity act,Conte ...

  6. java aes 工具类_Java中的AES加解密工具类:AESUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...

  7. java获取属性工具类,Java中常用的工具类总结

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类. 有了这些轮子,会使代码更加简洁,优美, 但是需要经常看看大佬的源码, 这样才会有进步! 不能光会用 ...

  8. java json 工具类_Java中JSON处理工具类使用详解

    本文实例为大家分享了JSON处理工具类的具体代码,供大家参考,具体内容如下 import java.io.IOException; import java.util.Date; import java ...

  9. java工具类-DigestUtils实现md5码加密

    commons-codec-1.3jar放进去 第一种 String psd = DigestUtils.md5DigestAsHex(tbUser.getPassword().getBytes()) ...

最新文章

  1. Redis概述和基础
  2. 一个比较保守的404页面
  3. python语言的考试_【Python学习路线】Python语言基础自测考试 - 中级难度
  4. 《C语言程序设计:问题与求解方法》——1.4节本章习题
  5. 【3】python核心编程 第六章-序列:字符串、列表和元组
  6. java数据结构至对称矩阵压缩存储
  7. 文件授权以及查看系统的一些信息命令
  8. 苹果6可以分屏吗_榨苹果汁可以加蜂蜜水吗?蜂蜜苹果汁的作用
  9. pythontcp服务器如何关闭阻塞_利用Python中SocketServer 实现客户端与服务器间非阻塞通信...
  10. C# AE axGlobeControl The 3D Analyst extension has not been enabled.
  11. 深度学习:未来机器人的进化途径
  12. Flexsim——初学AGV必看的知识点(如何解决AGV锁死的情况)
  13. android下canvas连线题思路
  14. 国内50个热点行业产业链全景图
  15. 2022年API接口零代码、低代码、纯代码开发的框架推荐
  16. 室友还不知道FAST中国天眼是什么,快把这篇文章推给他,浅学一手卫星通信
  17. SolidWorks如何编辑今日制造插件生成的齿轮
  18. OPA和Gatekeeper区别?
  19. 新手入坑:strapi官网教程的简单示例学习
  20. DNS域欺骗攻击详细教程之Windows篇

热门文章

  1. 面试车祸现场——面试题总结
  2. AOJ 606.LOL系列之德玛短路
  3. macbook touchbar 音量和亮度调节键消失了
  4. Meta发言人否认扎克伯格辞职;英国对苹果和谷歌展开反垄断调查;罗永浩官宣细红线科技融资成功 | 每日大事件...
  5. 苹果怎么关闭自动亮度_小米10的自动亮度到底有什么玄机?听听高管怎么说
  6. IP黑名单匹配(华为2021实习笔试)
  7. 山东女子学院计算机专业好考吗,高考654分报考山东女子学院,知道真相后眼泪掉下来!...
  8. ORACLE插入字符串换行
  9. 往事并不如烟——听苹果人讲述苹果的历史故事
  10. 绝非杞人忧天!人工智能即将取代人类劳工