lua rc4算法实现

  由于项目需要,用python django写restful接口遇到瓶颈,python django+uwsgi处理请求是会阻塞的,

如果阻塞请求不及时处理,会卡住越来越多的其它的请求,导致越来越多的502。所以将请求处理频繁的,会阻

塞长时间的接口用lua实现,lua放在nginx里跑,还是很快的。

  呵呵,费话少说了!

  项目因用 到rc4加密算法,但网上实现lua rc4算法的很少,有的要依赖lua第三方库,很不方便。根据wiki

现自己的算法:

  

-- RC4
-- http://en.wikipedia.org/wiki/RC4

function 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 S
end

function 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 K
end

function RC4(key, text)
    local text_len = string.len(text)

    local S = KSA(key)
    local K = PRGA(S, text_len)
    return output(K, text)
end

function 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 0
end

function bit_op.cond_xor(r_a, r_b)
    return (r_a + r_b == 1) and 1 or 0
end

function bit_op.cond_or(r_a, r_b)
    return (r_a + r_b > 0) and 1 or 0
end

function 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 res
end

function bxor(a, b)
    return bit_op.base(‘cond_xor‘, a, b)
end

function band(a, b)
    return bit_op.base(‘cond_and‘, a, b)
end

function 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)

  可以根据python的Crypto.Cipher库中ARC4算法比较,相关代码在github

lua rc4算法实现,布布扣,bubuko.com

时间: 2024-07-30 10:05:29

lua rc4算法实现的相关文章

流密码(序列密码)与Rc4算法

"流密码(序列密码)与Rc4算法" Rc4是一种序列密码,它是一种可变密钥长度.面向字节操作的序列密码,一个明文字节与一个密钥字节相异或产生一个密文字节. 算法原理:对于n = 8位长的字,即以一个字节为单位,此时N = 256,用从1到256个字节的可变长度密钥初始化一个256个字节的状态矢量arr,arr中的元素arr[0],arr[1],,,arr[255],自始至终置换后的arr包含0~255的所有8比特数,密钥流中的密钥key由arr中256个元素按一定方式选出一个元素来充当

【安全牛学习笔记】WEP加密、RC4算法

WEP加密                                                            使用Rivest Cipher 4 (RC4)算法加密流量内容,实现机密性               CRC32算法检查数据完整性                                             标准采用使用24位initialization vector (IV)                          受美国加密技术出口限制法律

RC4算法的Python实现详注

刚对RC4算法进行了学习,网上发现https://ju.outofmemory.cn/entry/46753 中作者展示了RC4的python实现,但代码缺乏注释,较为晦涩,因此本文对部分代码进行了注释,希望能对学习RC4算法的pythoner有所帮助. 1 #/usr/bin/python 2 #coding=utf-8 3 import sys,os,hashlib,time,base64 4 def rc4(string, op = 'encode', public_key = 'ddd'

RC4算法

RC4算法简介:https://baike.baidu.com/item/RC4%E7%AE%97%E6%B3%95/9686396?fr=aladdin RC4算法java实现: /** * RC4加解密算法 * RC4对称性加密解密算法 */ public class RC4 { /** * 解密后的数据为String类型 * * @param data * @param key * @return */ public static String decryRC4Str(byte[] dat

c# rc4算法,加密解密类

rc4.. 1 /* 2 * 由SharpDevelop创建. 3 * 用户: YISH 4 * 日期: 04/04/2015 5 * 时间: 03:01 6 * 7 * 要改变这种模板请点击 工具|选项|代码编写|编辑标准头文件 8 */ 9 using System; 10 11 namespace Libraries 12 { 13 /// <summary> 14 /// Description of CryptoGraphy. 15 /// </summary> 16 p

听说是rc4算法

题目内容: key welcometoicqedu 密文UUyFTj8PCzF6geFn6xgBOYSvVTrbpNU4OF9db9wMcPD1yDbaJw== 看到题目就知道是rc4加密了,直接解可得flag flag:flag{rc4_l_keepgoing} 总结:rc4 原文地址:https://www.cnblogs.com/zaixialongaotian/p/10298936.html

RC4加密解密算法原理与完整源代码实例演示

RC4加密算法 RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇.之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节.该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性.RC4起初是用于保护商业机密的.但是在1994年9月,它的算法被发布在互联网上,也就不再有什么商业机密了.RC4也被叫做ARC4(Alleged RC4——所谓的RC4),因为RSA从来就没有正式发布过这个算法. 原理 R

【算法】用Lua解决八皇后的问题

最近在学习Lua脚本,经过了不到十天的学习,也算是对语法有所了解吧,另外正好也看到了八皇后问题,感觉挺有意思的 就试了试用算法解出来. 八皇后问题的原题是:八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上. 以下是lua的算法代码: local eightQueen = { 0,0,0,0,0,0,0,0,} local count = 0 functi

对称加密算法之RC4介绍及OpenSSL中RC4常用函数使用举例

RC4是一种对称密码算法,它属于对称密码算法中的序列密码(streamcipher,也称为流密码),它是可变密钥长度,面向字节操作的流密码. RC4是流密码streamcipher中的一种,为序列密码.RC4加密算法是Ron Rivest在1987年设计出的密钥长度可变的加密算法簇.起初该算法是商业机密,直到1994年,它才公诸于众.由于RC4具有算法简单,运算速度快,软硬件实现都十分容易等优点,使其在一些协议和标准里得到了广泛应用. 流密码也属于对称密码,但与分组加密算法不同的是,流密码不对明