本文主要是介绍RE_RC4加密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
之前做的几道题目,rc4也是经常遇到,今来系统学学,记录一下
对称加密,即加密和解密的密钥可以相互推导,也有的是相同的。
RC4 是以字节流处理每一个字节,而不是 DES 的分组操作。
包含三个参数:key ,enc , len(enc)
首先就是 S 盒的生成,256个字节,先是0-256填充,然后又用 key,len(key) 去替换 S 盒的部分,形成一个伪随机的 S 盒。
然后就是 S 盒和密文逐个字节异或,得到密文。解密再异或回去就可以了。
def S_init(key, key_len):S = list(range(256))K = [key[i % key_len] for i in range(256)]j = 0for i in range(256):j = (j + S[i] + K[i]) % 256S[i], S[j] = S[j], S[i]return Sdef encrypt(data, key):key_len = len(key)data_len = len(data)S = S_init(key, key_len)i = 0j = 0enc = bytearray()for byte in data:i = (i + 1) % 256j = (j + S[i]) % 256S[i], S[j] = S[j], S[i]tmp = (S[i] + S[j]) % 256k = S[tmp]enc.append(byte ^ k)return bytes(enc)def decrypt(ciphertext, key):# RC4 decryption is the same as encryptionreturn encrypt(ciphertext, key)if __name__ == "__main__":data=[0xD5, 0xB2, 0x7C, 0xDC, 0x90, 0xA2, 0x6E, 0x60,0x06, 0x13, 0xE4, 0x71, 0x59, 0xB0, 0x90, 0x31,0xB2, 0xC7, 0x1D, 0xD7,0x7f]str='litctf!'key=list(map(ord,str))res=encrypt(data,key)print(res)
[LitCTF 2024]ezrc4
就是一个简单的 RC4,密文就在开头,key 最外面是错的,交叉引用,去得到真 key
enc: 0xD5, 0xB2, 0x7C, 0xDC, 0x90, 0xA2, 0x6E, 0x60,0x06, 0x13, 0xE4, 0x71, 0x59, 0xB0, 0x90, 0x31,0xB2, 0xC7, 0x1D, 0xD7,0x7f
可以直接写脚本,也可以去动调
main函数之前应该还有反调试,但没找到,啧。
这会也没遇到专门的RC4的了,之后遇到再写上。
这篇关于RE_RC4加密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!