type
status
date
slug
summary
tags
category
icon
password
一、简介
在密码学中,RC4是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。所谓对称加密,就是加密和解密的过程是一样的。RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一。
RC4已经成为一些常用的协议和标准的一部分,如1997年的WEP和2003/2004年无线卡的WPA; 和1995年的SSL,以及后来1999年的TLS。让它如此广泛分布和使用的主要因素是它不可思议的简单和速度,不管是软件还是硬件,实现起来都十分容易。
二、基本原理
- 加密:原文和Keystream进行异或得到密文
- 解密:密文和Keystream进行异或得到原文

三、生成秘钥流(KeyStream)
1、初始化S和T
for i=0 to 255 do S[i]=i; T[i]=K[ i mod len(key) ];
2、初始排列S
j=0; for i=0 to 255 do j=(j+S[i]+T[i]) mod 256; swap(S[i],S[j]);
3、产生密钥流
i,j=0; for r=0 to len do //r为明文长度,r字节 i=(i+1) mod 256; j=(j+S[i]) mod 256; swap(S[i],S[j]); t=(S[i]+S[j]) mod 256; k[r]=S[t];
.png?table=block&id=78ef8498-be94-4d92-96d3-c6db802715af&t=78ef8498-be94-4d92-96d3-c6db802715af&width=1085&cache=v2)
在密码学中,S盒(Substitution-box)是对称密钥算法执行置换计算的基本结构。S盒用在分组密码算法中,是唯一的非线性结构,其S盒的指标的好坏直接决定了密码算法的好坏。
# coding=utf-8 import base64 def encrypt_logic(key, ciphertext): S = rc4_init(key) i = j = 0 result = '' for a in ciphertext: i = (i + 1) % 256 j = (j + S[i]) % 256 S[i], S[j] = S[j], S[i] k = chr(ord(a) ^ S[(S[i] + S[j]) % 256]) result += k return result def rc4_init(key): # S盒初始化置换,K为密钥 S = [] j = 0 k = [] # 临时数组 for i in range(256): S.append(i) k.append(key[i % len(key)]) for i in range(256): j = (j + S[i] + ord(k[i])) % 256 S[i], S[j] = S[j], S[i] # 交换S[i],S[j] return S def rc4_encrypt(key,ciphertext): result = encrypt_logic(key,ciphertext) return base64.b64encode(result) def rc4_decrypt(key,ciphertext): result = encrypt_logic(key,base64.b64decode(ciphertext)) return result if __name__ == '__main__': key = 'abcdefghijk' ciphertext = 'this is a test' print("key:" + key) print("message:" + ciphertext) en_ciphertext = rc4_encrypt(key, ciphertext) print("Encrypt:" + en_ciphertext) de_ciphertext = rc4_decrypt(key, en_ciphertext) print("Decrypt:" + de_ciphertext)
在安卓逆向中,RC4的特征并没有Base64那么明显,但是也可以根据S盒的长度、密钥流的产生过程及异或运算的特征来确定是否是RC4,当然,因为RC4属于流加密,所以也可以把明文的长度和加密后的长度是否相等作为入手点。
- 作者:404False
- 链接:https://404nofoundx.top/article/7f8161d2-79fc-4e32-a0d2-7b370bc54602
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。