gpt4 book ai didi

hash - 纯 lua 中的 HMAC-MD5

转载 作者:行者123 更新时间:2023-12-04 05:16:41 25 4
gpt4 key购买 nike

我需要用纯Lua写一个HMAC-MD5算法..

我得到了这个算法 from Wikipedia

function hmac (key, message)
if (length(key) > blocksize) then
key = hash(key) // keys longer than blocksize are shortened
end if
if (length(key) < blocksize) then
key = key ∥ [0x00 * (blocksize - length(key))] // keys shorter than blocksize are zero-padded ('∥' is concatenation)
end if

o_key_pad = [0x5c * blocksize] ⊕ key // Where blocksize is that of the underlying hash function
i_key_pad = [0x36 * blocksize] ⊕ key // Where ⊕ is exclusive or (XOR)

return hash(o_key_pad ∥ hash(i_key_pad ∥ message)) // Where '∥' is concatenation
end function

我有来自 here 的 md5 代码. md5 计算功能正常工作..

在lua中实现算法,到目前为止我有以下代码
local function hmac_md5(key,msg)
local blocksize = 64

if string.len(key) > blocksize then
key = calculateMD5(key)
end

while string.len(key)<blocksize do
key = key .. "0"
end

-- local o_key_pad = bit_xor((0x5c * blocksize),key)
-- local i_key_pad = bit_xor((0x36 * blocksize),key)

return calculateMD5(o_key_pad..calculateMD5(i_key_pad..message))
end

--calculateMD5 is the md5.Calc function in the Stackoverflow link specifed

我被困在计算 o_key_pad 和 i_key_pad 的部分..我只是对这两个值进行异或吗?维基百科链接中的 python 实现有一些奇怪的计算..
请帮忙!

最佳答案

是的,“⊕”是“异或”的符号。

  • 记住:一旦你计算出最终的哈希值,不要使用普通的字符串比较来检查散列是否正确。此 威尔允许攻击者签署任意消息。
  • 请注意 0x5c * blocksize可能不是您要找的,因为它会成倍增加 0x5c来自 blocksize .你想创建一个长度为 blocksize 的数组包含 0x5c在每个位置。
  • 请注意,您必须填充零字节,而不是字符 "0" .所以key = key .. "0"是错误的。应该是 key = key .. "\0" ,或者您在 Lua 中创建 NUL 字节。
  • 关于hash - 纯 lua 中的 HMAC-MD5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14177928/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com