Lua RC4 algorithm implementation

Source: Internet
Author: User

Due to project requirements, it is difficult to use Python Django to write restful interfaces. Therefore, Python Django + uwsgi will block requests,

If blocking requests are not processed in a timely manner, more and more other requests will be stuck, resulting in more and more 502. Therefore, requests that are frequently processed will be blocked.

The long-time interface of the plug is implemented by Lua, and Lua runs in nginx, which is still very fast.

Well, I have to talk about it!

The project uses the RC4 encryption algorithm, but there are few online implementation of the Lua RC4 algorithm, and some rely on the Lua third-party library, which is inconvenient. Based on the Wiki

Current algorithms:

  

-- RC4-- http://en.wikipedia.org/wiki/RC4function KSA(key)    local key_len = string.len(key)    local S = {}    local key_byte = {}    for i = 0, 255 do        S[i] = i    end    for i = 1, key_len do        key_byte[i-1] = string.byte(key, i, i)    end    local j = 0    for i = 0, 255 do        j = (j + S[i] + key_byte[i % key_len]) % 256        S[i], S[j] = S[j], S[i]    end    return Sendfunction PRGA(S, text_len)    local i = 0    local j = 0    local K = {}    for n = 1, text_len do        i = (i + 1) % 256        j = (j + S[i]) % 256        S[i], S[j] = S[j], S[i]        K[n] = S[(S[i] + S[j]) % 256]    end    return Kendfunction RC4(key, text)    local text_len = string.len(text)    local S = KSA(key)            local K = PRGA(S, text_len)     return output(K, text)endfunction output(S, text)    local len = string.len(text)    local c = nil    local res = {}    for i = 1, len do        c = string.byte(text, i, i)        res[i] = string.char(bxor(S[i], c))    end    return table.concat(res)end--------------------------------------------bit wise------------------------------------------local bit_op = {}function bit_op.cond_and(r_a, r_b)    return (r_a + r_b == 2) and 1 or 0endfunction bit_op.cond_xor(r_a, r_b)    return (r_a + r_b == 1) and 1 or 0endfunction bit_op.cond_or(r_a, r_b)    return (r_a + r_b > 0) and 1 or 0endfunction bit_op.base(op_cond, a, b)    -- bit operation    if a < b then        a, b = b, a    end    local res = 0    local shift = 1    while a ~= 0 do        r_a = a % 2        r_b = b % 2           res = shift * bit_op[op_cond](r_a, r_b) + res         shift = shift * 2        a = math.modf(a / 2)        b = math.modf(b / 2)    end    return resendfunction bxor(a, b)    return bit_op.base(‘cond_xor‘, a, b)endfunction band(a, b)    return bit_op.base(‘cond_and‘, a, b)endfunction bor(a, b)    return bit_op.base(‘cond_or‘, a, b)end--key = "Key"--text = "Plaintext"--K = RC4(key, text)--print (K)--text = RC4(key, K)--print (text)----key = "Wiki"--text = "pedia"--K = RC4(key, text)--print (K)----key = "Secret"--text = "Attack at dawn"--K = RC4(key, text)--print (K)

 

You can compare the arc4 algorithm in the python crypto. Cipher library.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.