安全基础学习-RC4加密算法
这里仅仅记录一些基础的概念。后期有需求进一步扩展。
RC4 是一种对称流加密算法,由罗恩·里维斯特(Ron Rivest)于1987年设计。RC4 的设计目的是提供一种简单且高效的加密方法。尽管 RC4 曾经广泛使用,但它的安全性在现代已受到质疑。
1、基本概念
- 对称加密:RC4 使用相同的密钥进行加密和解密。
- 流加密:RC4 将明文逐字节地与伪随机生成的字节流进行异或操作来生成密文。
2、工作流程
2.1密钥调度算法 (Key Scheduling Algorithm, KSA):
- 初始化一个长度为256的数组 S,数组的元素为0到255。
S[i] = i
- 使用密钥对数组 S 进行打乱。密钥可以是任意长度的字节串。
- 打乱过程涉及到遍历 S 数组,并根据密钥对 S 进行交换操作。
2.2 伪随机数生成算法 (Pseudo-Random Generation Algorithm, PRGA):
- 从初始化后的 S 数组生成伪随机字节流。
- 生成的伪随机流用于与明文进行异或操作,从而生成密文。
3、详细步骤
3.1 密钥调度算法 (KSA):
- 初始化数组 S:
S[i] = i (for i = 0 to 255)
- 初始化变量 j = 0。
- 对数组 S 进行打乱:
for i = 0 to 255j = (j + S[i] + K[i % 密钥长度]) % 256swap S[i] with S[j]```
3.2 伪随机数生成算法 (PRGA):
- 初始化变量 i = 0 和 j = 0。
- 生成伪随机字节流:
i = (i + 1) % 256 j = (j + S[i]) % 256 swap S[i] with S[j] K = S[(S[i] + S[j]) % 256]
- 使用 K 对明文进行异或操作生成密文。
3.4 加密与解密
加密和解密过程使用相同的步骤,因为 RC4 是对称加密算法。通过伪随机字节流的异或操作,明文可以加密成密文,密文可以解密回明文。
示例
假设密钥是 0x01 0x02 0x03 0x04
,明文是 0x10 0x20 0x30
:
- 使用密钥初始化数组 S。
- 生成伪随机字节流,例如 0xAB 0xCD 0xEF。
- 明文与伪随机字节流异或,得到密文 0xA9 0xED 0xDF。
- 通过相同的伪随机字节流,密文 0xA9 0xED 0xDF 经过异或操作恢复明文 0x10 0x20 0x30。
4、总结
- 密钥调度算法 (KSA):用密钥打乱一个初始数组。
- 伪随机数生成算法 (PRGA):使用打乱后的数组生成伪随机字节流。
- 加密/解密:将明文与伪随机字节流异或生成密文,反过来也是一样的。
RC4因其简单性和高效性被广泛使用,但其安全性在现代已经不再被推荐,尤其是当密钥长度不足或者使用不当时,可能会导致加密被破解。
5、python实现
def rc4_ksa(key):"""密钥调度算法 (Key Scheduling Algorithm, KSA)"""key_length = len(key)S = list(range(256))j = 0for i in range(256):j = (j + S[i] + key[i % key_length]) % 256S[i], S[j] = S[j], S[i] # 交换 S[i] 和 S[j]return Sdef rc4_prga(S, data_length):"""伪随机数生成算法 (Pseudo-Random Generation Algorithm, PRGA)"""i = 0j = 0key_stream = []for _ in range(data_length):i = (i + 1) % 256j = (j + S[i]) % 256S[i], S[j] = S[j], S[i] # 交换 S[i] 和 S[j]K = S[(S[i] + S[j]) % 256]key_stream.append(K)return key_streamdef rc4_encrypt_decrypt(key, data):"""RC4 加密和解密"""S = rc4_ksa(key)key_stream = rc4_prga(S, len(data))return bytes([data[i] ^ key_stream[i] for i in range(len(data))])# 示例用法
if __name__ == "__main__":key = bytes([1, 2, 3, 4]) # 密钥plaintext = bytes([16, 32, 48]) # 明文# 加密ciphertext = rc4_encrypt_decrypt(key, plaintext)print("Ciphertext:", ciphertext)# 解密decrypted_plaintext = rc4_encrypt_decrypt(key, ciphertext)print("Decrypted Plaintext:", decrypted_plaintext)
参考资料
参考链接1
相关文章:

安全基础学习-RC4加密算法
这里仅仅记录一些基础的概念。后期有需求进一步扩展。 RC4 是一种对称流加密算法,由罗恩里维斯特(Ron Rivest)于1987年设计。RC4 的设计目的是提供一种简单且高效的加密方法。尽管 RC4 曾经广泛使用,但它的安全性在现代已受到质疑…...

雨云宁波电信大带宽服务器测评(非广告)
提示:本文非广告,非宣传! 本文长期更新地址:雨云宁波电信大带宽服务器测评(非广告) 雨云现在有一个国内的新区——宁波 宣传的是电信大带宽,可附加100G防御,采用NVME,和铂…...

2024年,最新前端趋势
随着技术的不断发展,前端开发领域在2024年迎来了新的趋势和挑战。对于开发者来说,紧跟这些趋势不仅能提升技术水平,还能在激烈的市场竞争中脱颖而出。今天,我想向大家介绍一款在这波趋势中脱颖而出的开发神器——MemFire Cloud。这…...

Linux静态进程和动态进程查看管理
1.静态进程的查看PS PPID:谁启动的父亲ID USER:运行进程的用户名称 PID:进程ID %CPU:CPU的占用比例占用资源 %MEM:内存使用的占用比例 VSZ:占用虚拟内存多少 RSS:占用实际内存多少 TTY:…...

CPU飙升 怎么定位问题
传统的方法 【top】 查看所有进程占系统CPU的排序,定位是哪个进程搞的鬼。PID那一列就是进程号。 【top -Hp pid】 定位进程中使用 CPU 最高的线程tid 【printf ‘0x%x’ tid】 线程 tid 转化 16 进制,例如printf ‘0x%x’ 11882 得到16进制的 0x2e6a 【jstack…...

The Sandbox 游戏制作教程第 4 章|使用装备制作游戏,触发独特互动
欢迎回到我们的系列,我们将记录 The Sandbox Game Maker 的 “On-Equip”(装备)功能的多种用途。 如果你刚加入 The Sandbox,On-Equip 功能是 “可收集组件”(Collectable Component)中的一个多功能工具&a…...
JS 和 JSX、TS 和 TSX 的区别
1. JS(JavaScript) 定义与特性: JavaScript(简称JS)是一种轻量级、解释型或即时编译型的编程语言。它基于原型编程、多范式的动态脚本语言,支持面向对象、命令式、声明式、函数式编程范式。JavaScript 是…...

25款极氪007上市,小米SU7就不该买?
文 | AUTO芯球 作者 | 谦行 我是刚刚才知道 买小米SU7的原来是盯着他这两个功能 可爱的小女孩喊小爱同学帮她停个车 妈妈给她说SU7自己能停好,她还叮嘱一句“小爱同学你给我好好停” SU7滴溜溜的就停在车位上,全程不到一分钟 视频属实温馨&#x…...

旋转字符串 | LeetCode-796 | 模拟 | KMP | 字符串匹配
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 🕹️KMP算法练习题 LeetCode链接:796. 旋转字符串 文章目录 1.题目描述🍑2.题解🫐2.1 暴力解法🫒2.2 模拟…...

网络安全测试工具Burp Suite基本使用
一、介绍 Burp Suite 是一款由 PortSwigger 开发的集成网络安全测试工具,广泛用于渗透测试和漏洞扫描。它提供了一系列功能强大的工具和功能,帮助安全研究人员和渗透测试人员识别和修复 Web 应用程序中的安全漏洞。以下是 Burp Suite 的主要功能和特点&…...

使用pytest+selenium编写网页UI自动化脚本和用例
1 UI自动化测试 UI自动化测试(User Interface Automation Testing)是一种通过编写脚本或使用自动化测试工具,对界面(UI)进行自动化测试的方法。原理主要是模拟用户打开客户端或网页的UI界面,自动化执行用户…...

新能源遇“秋老虎”,8月第二周销量集体下滑,问界惨遭腰斩
文/王俣祺 导语:随着日前7月份乘用车销量的公布,我们发现7月并没有因6月各车企的“冲量”行为迎来反噬,对于这种“淡季不淡”的现象市场上一片看好。但从近日公布的8月销量数据来看,人们对于“秋老虎”的恐怖可以说是一无所知。随…...
SEO模板网站的wordpress主题最适合google外贸SEO
在寻找最适合Google外贸SEO的WordPress主题时,有几个关键因素需要考虑:速度、SEO友好性、多语言支持、以及是否易于定制。以下是一些推荐的WordPress主题,它们不仅速度快,而且对SEO非常友好,非常适合外贸网站ÿ…...
fetch跨域请求数据的前端设置和后端php的header设置
跨源请求,也称为CORS(Cross-Origin Resource Sharing)请求,是Web开发中常见的一种需求,允许一个网页的JavaScript代码向与该网页不同源的服务器发出HTTP请求。以下是使用JavaScript中的fetch函数进行跨源请求的一个基本…...

Ted靶机
信息收集: 靶机地址:https://www.vulnhub.com/entry/ted-1,327/ (1)ip扫描 nmap 192.168.254.0/24 -sn | grep -B 2 00:0C:29:FF:7F:9A (2)端口扫描 nmap -p- -A 192.168.254.159 (3&#x…...
HarmonyOS ArkTS 构建布局
在 HarmonyOS 中,ArkTS 是一种基于 TypeScript 的编程语言,专为开发 HarmonyOS 应用而设计。构建布局是开发应用的关键步骤之一。以下是如何在 ArkTS 中构建布局的基本指南。 1. 创建项目和页面 首先,确保已经创建了一个 HarmonyOS 项目。如…...
yolov5详解(二):通过yaml文件构建完整模型
依然拿yolov5l v6.0版本来讲解 1. yaml文件 以下是yolov5l.yaml文件内容 # YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parameters nc: 80 # number of classes depth_multiple: 1.0 # model depth multiple width_multiple: 1.0 # layer channel multiple …...

8月8日学习笔记 python基础
1.环境 python2, python3 yum list installed|grep python yum -y install python3 # 最新安装3.12可以使⽤源码安装,教程是在第⼀个星期pdf python3 --version 3.6.8 #进⼊到python的编辑状态 python3 # 如果直接输⼊python,也会进⼊到pyth…...

电动自行车出海黑马Avento独立站拆解(上)丨出海笔记
这次我们来拆解一个电动自行车的独立站 为什么选电动自行车? 因为全球疫情,带来出行问题——避免聚集,大家都减少了公共交通工具,而改为自行车,电动自行车...... 君不见疫情之后无论是出行自行车,还是健…...

Gerrit 使用教程
一、Gerrit简介 Gerrit,一种开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的程序员,可以相互审阅彼此修改后的代码,决定是否能够提交,退回或是继续修改。它使用版本控制系统Git作为底…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...