前言

上学期密码学的作业,写一下。

简介

在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。

原理

其原理主要分为三步:
RC4的原理分为三步:

初始化S和T

for i=0 to 255 doS[i]=i;T[i]=K[ imodkeylen ];

初始排列S

j=0;
for i=0 to 255 doj= ( j+S[i]+T[i])mod256;swap(S[i],S[j]);

产生密钥流

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];

正确性分析
由于经过加密后的结果,输出的是一些不可见,所以又使用base64进行了再次加密,使其转化为可见字符。

安全性分析

理论上来说,RC4算法是很难被破解的。RC4中用到的key是长度在[1,256]的unsigned char字符串,可能性就是256+2562+2563+…256256≈256256次方种可能性,量级在10^600以上。如果你真的设置了一个256byte(不是bit哦)的key,别人想要暴力破解几乎是不可能的。
由于RC4算法加密是采用的xor,所以,一旦子密钥序列出现了重复,密文就有可能被破解。
由于存在部分弱密钥,使得子密钥序列在不到100万字节内就发生了完全的重复,如果是部分重复,则可能在不到10万字节内就能发生重复,因此,推荐在使用RC4算法时,必须对加密密钥进行测试,判断其是否为弱密钥。其不足主要体现于,在无线网络中IV(初始化向量)不变性漏洞。
加大被破解的难度:
(1)定时更换key,就像网民应该定时更换自己的密码一样。
(2)在真实原文里混杂一些随机字符串再加密。
(3)并不把加密串直接暴露给公众,可以对加密串做二次加密。(循环移位、字符-字符映射、按某种规则打散、再做一次RC4、等等)

代码

下面给出Python的完整代码

#-*- coding: UTF-8 -*-
import hashlib
import base64def Rc4_init(S, K):  # S盒初始化置换,K为密钥j = 0K = hashlib.md5(K).hexdigest()k = []  # 临时数组for i in range(256):S.append(i)k.append(K[i % len(K)])for i in range(256):j = (j + S[i] + ord(k[i])) % 256S[i], S[j] = S[j], S[i]  # 交换S[i],S[j]def rc4_Encrypt(S, D):  i = j = 0result = ''for a in D:i = (i + 1) % 256j = (j + S[i]) % 256S[i], S[j] = S[j], S[i]t = (S[i] + S[j]) % 256k = chr(ord(a) ^ S[(S[i] + S[j]) % 256])result += kresult = base64.b64encode(result)return resultdef rc4_Decrypt(S, D): i = j = 0D = base64.b64decode(D)result = ''for a in D:i = (i + 1) % 256j = (j + S[i]) % 256S[i], S[j] = S[j], S[i]t = (S[i] + S[j]) % 256k = chr(ord(a) ^ S[(S[i] + S[j]) % 256])result += kreturn resultkey = 'dasdffdghfghjde'
d = 'thisisatest'
print("key:"+key)
print("m:"+d)s=[]
Rc4_init(s, key)
#print("s盒:")
#print(s)c = rc4_Encrypt(s, d)
print("Encrypt:"+c)s=[]
Rc4_init(s,key)
#print("s盒:")
#print(s)z = rc4_Decrypt(s, c)
print("Decrypt:"+z)

Python实现RC4相关推荐

  1. python实现RC4加密算法

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

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

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

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

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

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

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

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

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

  6. python加载图片的方法_python从网络读取图片并直接进行处理的方法

    python从网络读取图片并直接进行处理的方法 更新时间:2015年05月22日 10:09:08 作者:pythoner 这篇文章主要介绍了python从网络读取图片并直接进行处理的方法,涉及cSt ...

  7. 我看过的密码学方面的好文章

    本文不定期更新,最后更新于2019-5-18 密码 在Visual Studio命令提示符界面下编译链接OpenSSL自带的示例程序 数据安全及各种加密算法对比 非对称加密和证书总结 HTTPS 原理 ...

  8. 史上最全总结!爬虫常见加密解密算法

    文章目录 简介 JavaScript 加密解密模块 Crypto-JS Node-RSA JSEncrypt Python 加密解密库 Cryptodome & Crypto Hashlib ...

  9. RC4原理以及Python实现

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

最新文章

  1. APM - 零侵入监控Http服务
  2. 走过2011---年终总结
  3. ios rsa java_一篇搞定RSA加密与SHA签名|与Java完全同步
  4. Java 并发(JUC 包-05)
  5. cookie可存的最大限制_一文梳理Web存储,从cookie,WebStorage到IndexedDB
  6. 【追一科技】NLG技术:文本生成技术多样化应用的探索之路
  7. Jmail组件在C#中发送邮件代码:
  8. couchdb 视图操作_CouchDB 教程
  9. 用python分析《三国演义》中的社交网络
  10. 2017春节~人生智慧箴言
  11. 什么是下一代防火墙NGFW(Next Generation Firewall)?
  12. 什么是∨ue生命周期
  13. 用什么软件可以记录并提醒每天的工作任务?
  14. 在app中关闭第三方app
  15. (1)网站搭建BT面板的安装步骤
  16. js判断网络链接的四种方法
  17. java/php/net/python车辆保养管理系统设计
  18. 评估期已过。有关如何升级您的测试版软件的信息 请访问
  19. CAP理论为什么不能同时满足
  20. 网安学习-Python安全开发

热门文章

  1. 帮您在演讲时克服紧张情绪
  2. 使用微信官方的小程序Demo
  3. 开放、包容的Domino V11
  4. 【机器学习】saturate的解释
  5. oracle11查看dblink,dblink查询(查询dblink下的所有表)
  6. 一个简单的股票交易工具是怎样的?
  7. 还是关于接口(比较复杂的法律法规项)
  8. Java中回收资源的方法
  9. python识图 web_轻松简单搭建一个python的OCR服务器 识别截图中内容并提取
  10. matlab中reshape和repmat使用方法