RC4 python实现
RC4算法是一种流密码(面向字节操作),密钥长度可变(根据明文长度生成密钥流)
RC4加密流程:
1,初始化状态数组S:长度256字节,每个S[i] 为1个字节,S[i]的值为 0-255
2,初始化临时数组T:T的长度为256字节,每个T[i]为1个字节,
首先生成一个密钥数组Key, Key的长度为1~256字节(随机),每个Key[i] 为1个字节,并且每个Key[i] 的值为随机生成的;
然后将数组Key中的每个Key[i]轮流并且循环放入数组 T,比如Key[]=1,2,3,4,5 ,则放入数组T:T[] =1,2,3,4,5,1,2,3,4,5…1,2,3,4,5,1,2 将数组T填满,这样数组 T 完成了初始化,又具有随机性;
3,初始置换数组 S :通过初始化后的T,和一个变量 j=0,打乱数组 S,使 S具有随机性:
通过对于每一个S[i],通过 j = (j + S[i] + T[I]) mod 256 ,交换 S[i] 和 S[j] 的值;
关于这一步我的理解:因为初始化后的数组T 具有随机性,因此将T元素加入获得S[j]并置换S[i] 和S[j] ,使得数组S 伪随机;
4,生成密钥流KeyStream:首先通过获取明文长度,决定生成与明文等长的密钥流,
通过对每个S[i],j=0,j=(j+S[i]) mod 256将S[i]与S[j] 置换,当i>255,回到S[0],再重复置换操作:
j,t = 0,0
for i in range(txtlen): // txtlen 为明文长度,通过循环,生成等长的密钥流
i = i mod 256 //通过mod 256 ,保证后续对数组S的重复操作
j = (j+S[i]) mod 256
tmp = S[i]
S[i] = S[j] //置换S[i] 与S[j]
S[j] = tmp
t = (S[i] + S[j]) mod 256
KeyStream.append(S[t]) //S[t]为 密钥流中的一位
关于这一步我的理解:假设一个盒子叫S,里面放着一排256个写着从 0-255 号数的小球,并且这个256个小球是先前打乱的,现在你需要从S盒中摸出第一个(i), 和通过公式 j = (j+S[i]) mod 256 得到的第 j 个,将球上的号码记下并通过公式 t = (S[i] + S[j]) mod 256 得出号码 t,那你再去摸出第t个小球,上面的号码S[t]就是密钥流中的一位,并且你把第一个(i)小球和第j个小球交换一下再放回S盒,然后重复刚刚的步骤去摸第二个(i)和第j个以此类推,直到你重复这个步骤 txtlen次; 注:当你摸到第256个(即最后一个),但是你还没做完txtlen次,那么你下一次摸球就是回到第一个开始,这个就是对应的对数组S的重复操作;
贴上参考代码,如有不对,请多指教^-^:
#encoding = utf-8
import random# 初始化向量 S
def init_S():global Sfor i in range(256):S.append(i)# 初始化向量 T
def init_T():global Key,Tkeylen = random.randint(1,256)for i in range(keylen):index = random.randint(0,61) #获取随机的临时密钥KeyKey.append(WordList[index])for i in range(256):tmp = Key[i % keylen] #初始化向量TT.append(tmp)# 初始置换 S[i]
def swap_S():global S,Tj = 0for i in range(256):j = (j+S[i]+ord(T[i])) % 256tmp = S[i]S[i] = S[j]S[j] = tmp# 密钥流生成
def Get_KeyStream():global S,text,KeyStreamtxtlen = len(text)j,t = 0,0for i in range(txtlen):i = i % 256j = (j+S[i]) % 256tmp = S[i]S[i] = S[j]S[j] = tmpt = (S[i] + S[j]) % 256KeyStream.append(S[t])# 加密 & 解密
def Get_code():global PlainText,CryptoText,KeyStream,textfor i in range(len(text)):CryptoText += chr(ord(text[i]) ^ KeyStream[i]) # 加密for i in range(len(text)):PlainText += chr(ord(CryptoText[i]) ^ KeyStream[i]) # 解密print('''[+]=================开始加密==================''')print("[+]你的密文---------->",CryptoText)print('''[+]=================开始解密==================''')print("[+]你的明文---------->",PlainText)if __name__ == '__main__' :T,S,Key = [],[],[]PlainText,CryptoText,KeyStream = '','',[]WordList = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" # 用于生成临时密钥 Keyprint('''——————— ———————— ——————| —— \ / _____| / | || |__) | | / / —— | || __ / | | / |_| | | ^__^ is easy ~, that right ?| | \ \ | |_____ |______| ||__| \__\ \________| |_|██████╗ ██████╗██╗ ██╗ ███╗ ███╗ ██╗███████╗ ███████╗ █████╗ ███████╗██╗ ██╗██╔══██╗██╔════╝██║ ██║ ██╔██╗ ██╔██╗ ██║██╔════╝ ██╔════╝██╔══██╗██╔════╝╚██╗ ██╔╝██████╔╝██║ ███████║ ╚═╝╚═╝ ╚═╝╚═╝ ██║███████╗ █████╗ ███████║███████╗ ╚████╔╝ ██╔══██╗██║ ╚════██║ ██║╚════██║ ██╔══╝ ██╔══██║╚════██║ ╚██╔╝ ██║ ██║╚██████╗ ██║ ███████╗ ██║███████║ ███████╗██║ ██║███████║ ██║ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚══════╝ ╚═╝╚══════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═╝ ''')text = input("[+]please input you Plaintext here : ")init_S()init_T()swap_S()Get_KeyStream()Get_code()
代码运行正确的截图:
RC4 python实现相关推荐
- RC4原理以及Python实现
简介 RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变.它加解密使用相同的密钥,一个字节一个字节地加密.因此也属于对称加密算法.突出优点是在软件里面很容易实现. 加密流 ...
- RC4原理及其Python的实现
1. 背景与历史 RC4是一种流加密法,这意味着,其加密是逐个字节进行的,但也可以改为逐位加密或者是除字节/位之外的大小. RC4已经成为某些被广泛使用的加密技术和标准的一部分,包括无线设备隐私.用于 ...
- python 加密解密 rc4_python实现rc4加密解密,base64输出
这里将告诉您python实现rc4加密解密,base64输出,具体实现方法:from Crypto.Cipher import ARC4 as rc4cipher import base64 def ...
- 流密码-python实现RC4加密
1. 理解流密码的基本思想 2. 掌握RC4加密算法的加解密过程和实现方法 3. 采用自己熟悉的编程语言实现RC4密码算法.给定密钥abcde,试对明文"Shenzhen Universit ...
- python实现RC4加密算法
python实现RC4加密算法 RC4加密算法是一种对称的加密算法,加密解密用一个函数即可完成.在网上有好多实现算法写的非常复杂,加密解密用了两个不同的方法.因此在这里分享一个Python实现的RC4 ...
- 解析 RC4 加密算法(C语言、python)
目录 解析 RC4 加密算法(C语言.python): RC4加密算法是一种对称加密算法: 加密(解密)原理: RC4算法中的几个关键变量: RC4代码介绍: rc4初始化介绍: 包含三个参数: RC ...
- Python实现RC4
前言 上学期密码学的作业,写一下. 简介 在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变.它加解密使用相同的密钥,因此也属于对称加密算法. 原理 其原理主 ...
- rc4加密算法c语言实现,python实现RC4加密算法
1. 背景介绍 1.1 RC4算法 在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变.它加解密使用相同的密钥,因此也属于对称加密算法.RC4是有线等效加密( ...
- python学习之RC4算法实现
RC4算法 RC4算法是一种对称加密算法,即加密与解密的过程相同.假设其运算过程表示为rc4(key, data),其中key为密钥,data为待处理的数据,则: 密文=rc4(key,data) d ...
最新文章
- 利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型
- 在数量上超过微型计算机的是什么,在数量上超过微型计算机的是什么计算机
- linux怎么修改bash,Linux操作系统中如何对Bash变量内容修改?
- Python文件练习
- crash分析中有用的管道命令
- 食物和计算机中一样的英语,关于电脑和食物的英语口语
- Vue 在beaforeCreate时获取data中的数据
- shrio初体验(1)
- mercurial和svn_DBA Mercurial简介–分支和合并
- HTML5有哪些新特性
- mongodb创建集合命令db.createCollection详解
- Bailian2766 最大子矩阵【最大子段和+DP】
- mail安全性与加密
- scala安装与使用
- UT000010 Session is Invalid
- 截取邮箱后缀名,拼接访问邮箱地址
- PC端浏览器如何设置无图模式
- Illumina测序什么时候会测序到接头序列?
- UV滚动+自定义光线高光+LightMap阴影贴图+法线贴图效果shader
- ramdisk和linux PE,[PE教程]WINPE下如何再建一个Ramdisk盘