純粋な Lua で HMAC-MD5 アルゴリズムを作成する必要があります。
このアルゴリズムはウィキペディアから入手しました
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
ここから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 が計算される部分で立ち往生しています.. 2 つの値を XOR するだけですか? ウィキペディア リンクの Python 実装には、いくつかの奇妙な計算がありました。助けてください!