一、前言
成都创新互联公司主要从事做网站、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务茄子河,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
流密码是对称密码算法,是私钥密码系统中的一个分组。流密码的转换是随”变换”而变换的,像水流一样源源不断的产生,是对称密码算法,从明文输入流逐位或逐字节产生密文输出。今天我们来初认识一下流密码和使用最广泛的流密码RC4。
二、什么是流密码
流密码是私钥体质下的一个对称加密,类似于简单算法的”一次一密”,不过”一次一密”是真正的理想密码只要不能获得密码乱码本,就是完全保密。流密码使用的是伪随机数流,利用密钥产生一个密钥流Z=Z1Z2Z3…,然后利用此密钥流依次对明文X=X0X1X2…进行加密,这样产生的密码就是序列密码,也称为流密码。
设计流密码的因素
流密码就是使用较短的一串数字(叫它密钥吧),来生成无限长的伪随机密码流,当然事实上只需要生成和明文长度一样的密码流就够了。
流密码是将明文划分成字符(如单个字母),或其编码的基本单元(如0,1数字),字符分别与密钥流作用进行加密,解密时以同步产生的同样的密钥流实现。
通俗的讲,产生一串序列来作为加密的密钥流,从密钥流中按规则依次选取密钥,这些不同的密钥分别来加密每个字符。
流密码的强度依赖于密钥序列的随机性和不可预测性。
核心在于密钥流生成器的设计。
要保证收发两端密钥流的精确同步。
由此流密码的基础上,用较短的密钥产生无限长的密码流的方法非常多,其中有一种就叫做RC4。
三、RC4算法基础介绍
RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。RC4算法是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电子密码。
在介绍RC4前,说说那个“相加”运算怎么实现。现在我们把明文的信息限制在Ascii码字符集内(它已经能表示所有的英文资料了)
每个字符是一个比特,占8位。
假设明文是abc,
a、b、c的ascii值分别为
- 97、98、99
二进制形式为
- 01100001、01100010、01100011
密钥流和明文长度一样,假设是sdf,同样可以得到二进制流
- 01110011、01100100、01100110
让他们在对应位做异或运算就可以得到密文了c语言有^运算符来实现“相加”的操作。
我们就直接对字符进行“相加”即
- a^s, b^d, c^f
二进制形式为
- 00010010、00000110、00000101
它们分别表示
ascii码值为
- 18、6、5
的字符,在文本编辑器里打开是乱码,没有关系,反正是密文嘛
四、RC4
该算法是一个可变密钥长度、面向字节操作的流密码。该算法以随机置换作为基础,其密码周期很可能大于10^100,且该算法的运行速度很快。
RC4被用于为网络浏览器和服务器间通信而制定的SSL/TLS(安全套接字协议/传输层安全协议)标准中,以及作为IEEE 801.11无线局域网标准一部分的WEP(Wired Equivalent Privacy)协议和新的WiFi受保护访问协议(WAP)中。
从这些应用来看,RC4构成了当今网络通信的非常重要的部分,因此这个算法非常重要。
算法描述
算法代码
- # -*- coding: utf-8 -*-
- #by yuhao
- import random, base64
- from hashlib import sha1
- def crypt(data, key):
- x = 0
- box = range(256)
- for i in range(256):
- x = (x + box[i] + ord(key[i % len(key)])) % 256
- box[i], box[x] = box[x], box[i]
- x = y = 0
- out = []
- for char in data:
- x = (x + 1) % 256
- y = (y + box[x]) % 256
- box[x], box[y] = box[y], box[x]
- out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))
- return ''.join(out)
- def tencode(data, key, encode=base64.b64encode, salt_length=16):
- salt = ''
- for n in range(salt_length):
- salt += chr(random.randrange(256))
- data = salt + crypt(data, sha1(key + salt).digest())
- if encode:
- data = encode(data)
- return data
- def tdecode(data, key, decode=base64.b64decode, salt_length=16):
- """RC4 decryption of encoded data"""
- if decode:
- data = decode(data)
- salt = data[:salt_length]
- return crypt(data[salt_length:], sha1(key + salt).digest())
- # 需要加密的数据
- data = 'freebuf hello'
- # 密钥
- key = 'yuhao'
- # 加码
- encoded_data = tencode(datadata=data, keykey=key)
- print encoded_data
- # 解码
- decoded_data = tdecode(data=encoded_data, keykey=key)
- print decoded_data
五、总结
不过这里有一个小问题,当RC4的密钥长度超过128位时,目前没有任何攻击方法能够破解。不过 WEP协议易受到一种特殊的攻击方式攻击,但这个问题本质上并不在与RC4本身,而是RC4密钥的产生途径有漏洞
文章题目:流密码与RC4密码初认识
文章源于:http://www.csdahua.cn/qtweb/news49/281549.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网