密码学 | 对称加密算法RC4

一、简介

在密码学中,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];

在密码学中,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属于流加密,所以也可以把明文的长度和加密后的长度是否相等作为入手点。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

404NooFound

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值