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实现相关推荐

  1. RC4原理以及Python实现

    简介 RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变.它加解密使用相同的密钥,一个字节一个字节地加密.因此也属于对称加密算法.突出优点是在软件里面很容易实现. 加密流 ...

  2. RC4原理及其Python的实现

    1. 背景与历史 RC4是一种流加密法,这意味着,其加密是逐个字节进行的,但也可以改为逐位加密或者是除字节/位之外的大小. RC4已经成为某些被广泛使用的加密技术和标准的一部分,包括无线设备隐私.用于 ...

  3. python 加密解密 rc4_python实现rc4加密解密,base64输出

    这里将告诉您python实现rc4加密解密,base64输出,具体实现方法:from Crypto.Cipher import ARC4 as rc4cipher import base64 def ...

  4. 流密码-python实现RC4加密

    1. 理解流密码的基本思想 2. 掌握RC4加密算法的加解密过程和实现方法 3. 采用自己熟悉的编程语言实现RC4密码算法.给定密钥abcde,试对明文"Shenzhen Universit ...

  5. python实现RC4加密算法

    python实现RC4加密算法 RC4加密算法是一种对称的加密算法,加密解密用一个函数即可完成.在网上有好多实现算法写的非常复杂,加密解密用了两个不同的方法.因此在这里分享一个Python实现的RC4 ...

  6. 解析 RC4 加密算法(C语言、python)

    目录 解析 RC4 加密算法(C语言.python): RC4加密算法是一种对称加密算法: 加密(解密)原理: RC4算法中的几个关键变量: RC4代码介绍: rc4初始化介绍: 包含三个参数: RC ...

  7. Python实现RC4

    前言 上学期密码学的作业,写一下. 简介 在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变.它加解密使用相同的密钥,因此也属于对称加密算法. 原理 其原理主 ...

  8. rc4加密算法c语言实现,python实现RC4加密算法

    1. 背景介绍 1.1 RC4算法 在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变.它加解密使用相同的密钥,因此也属于对称加密算法.RC4是有线等效加密( ...

  9. python学习之RC4算法实现

    RC4算法 RC4算法是一种对称加密算法,即加密与解密的过程相同.假设其运算过程表示为rc4(key, data),其中key为密钥,data为待处理的数据,则: 密文=rc4(key,data) d ...

最新文章

  1. 利用 AssemblyAI 在 PyTorch 中建立端到端的语音识别模型
  2. 在数量上超过微型计算机的是什么,在数量上超过微型计算机的是什么计算机
  3. linux怎么修改bash,Linux操作系统中如何对Bash变量内容修改?
  4. Python文件练习
  5. crash分析中有用的管道命令
  6. 食物和计算机中一样的英语,关于电脑和食物的英语口语
  7. Vue 在beaforeCreate时获取data中的数据
  8. shrio初体验(1)
  9. mercurial和svn_DBA Mercurial简介–分支和合并
  10. HTML5有哪些新特性
  11. mongodb创建集合命令db.createCollection详解
  12. Bailian2766 最大子矩阵【最大子段和+DP】
  13. mail安全性与加密
  14. scala安装与使用
  15. UT000010 Session is Invalid
  16. 截取邮箱后缀名,拼接访问邮箱地址
  17. PC端浏览器如何设置无图模式
  18. Illumina测序什么时候会测序到接头序列?
  19. UV滚动+自定义光线高光+LightMap阴影贴图+法线贴图效果shader
  20. ramdisk和linux PE,[PE教程]WINPE下如何再建一个Ramdisk盘

热门文章

  1. 韩国计算机硕士累吗,在韩国读研究生有多心累...
  2. csr8675高通qcc5125修改蓝牙的usb声卡的ID方法
  3. 收集的常用的CTF学习资源网站
  4. 乐迪(RadioLink)Mini Pix组装六旋翼无人机疑难杂症解决1——只有4个电机转
  5. mysql支持存储emjoy表情
  6. Windows10 部署Davinci开发环境
  7. 5.1低噪放的基本指标
  8. ctfhub-->命令注入练习
  9. 被3名院士保举,他21岁破格任985高校教授!
  10. 货币的时间价值之复利计算公式