【寒江雪】流密码与RC4
来源:互联网 发布:win10手机共享网络usb 编辑:程序博客网 时间:2024/05/16 02:30
流密码
- 流密码概述
- 按位处理信息
- 产生伪随机密钥流
- 与明文按位异或
- 密钥流的随机性破坏了信息的统计属性
- Ci=Pi XOR StreamKeyi
- 千万不能重复使用流密钥
- 如果流加密对两个明文使用相同的密钥加密,则密码分析就会相当容易.如果对两个密文流进行异或,得出的结果就是两个原始明文的异或.如果明文仅是字符串,信用卡号或者其他已知特征的字节流,则密码分析非常容易成功
- [KUMA97]列出了设计流密码需要考虑的主要因素:
- 加密序列的周期要长
- 密钥流应尽可能接近于一个真正的随机数流的特征.加大密钥分析的难度.
- 为了防止穷举攻击,密钥应该足够长,对于分组密码也有同样的考虑
- 有很大的线性复杂度
- 适当地设计可以使流密码与使用相同密钥长度的分组密码一样安全.
RC4算法
RC4概述
- RC4 算法是面向字节流加密的算法.该算法中,一个字节的明文会与一个字节的密钥进行异或,产生一个字节的密文.
- RSA DSI拥有的专有(私有的)密码.
- 可变长的密钥长度,面向字节流的密码
- 被广泛地使用(web SSL/TLS,wireless WEP)
- 密钥的形成是所有8个比特值的随机排列
- 使用随机排列来搅乱输入的信息,一次处理一个字节
RC4算法描述
用从1到256个字节的可变长度密钥初始化一个256个字节的状态向量S,S的元素记为S[0],S[1],S[2]…,S[255].从始至终置换后的S包含从0\~255所有8比特数.对于加密和解密,字节K由S中255个元素按一定方式选出一个元素而生成.每生成一个K的值,S中的元素个体就被重新置换一次.每生成一个K的值,S中的元素个体就被重新置换一次.
初始化S
开始时,S中元素的值被置为按升序从0~255,同时建立一个临时向量T.如果密钥K的长度为256字节,则将K赋值给T.否则若密钥长度为keylen字节,则将K的值赋给T的前keylen个元素,并循环重复用K的值赋给T剩下的元素,直到T的所有元素都被赋值.
/*Initialization*/ for (int i = 0; i < 256; i++) { S[i] = i; T[i] = K[i % keylen]; }
然后用T产生的S的初始置换,从S[0]到S[255],对每个S[i],根据T[i]确定的方案,将S[i]置换为S中的另一字节
/*Initial Permutation of*/ int j = 0; for (int i = 0; i < 256; i++) { j = (j + S[i] + T[i])%256; swap(S[i], S[j]); }
因为对S的操作仅是置换,所以唯一的改变就是置换.S仍然包含所有值为0~255的元素.
密钥流的生成
向量S一旦完成初始化,输入密钥就不再被使用.密钥流的生成是从S[0]到S[255],对每个S[i],根据当前S的值,将S[i]与S中中的另一字节置换.当S[255]完成置换后,操作继续重复从S[0]开始
/* Stream Generation*/ int i = 0; int j = 0; while (true) { i = (i + 1) % 256; j = (j + S[i]) % 256; swap(S[i], S[j]); char t = (S[i] + S[j]) % 256; char k = S[t]; // TO DO::Encription }
加密中,将k的值与下一明文字节异或.
解密中,将k的值与下一密文字节异或.
整个过程如下图所示
Copyright© by 寒江雪
Date:2016.12.08
0 0
- 【寒江雪】流密码与RC4
- 流密码(序列密码)与Rc4算法
- 流密码及RC4算法
- Alleged RC4密码算法分析与实现
- RC4密码算法实现
- RC4流加密算法
- RC4
- RC4
- RC4
- rc4
- RC4
- RC4算法与Skype TCP加密算法介绍
- RC4 加密
- RC4加密算法
- RC4算法
- RC4算法
- Openssl-rc4
- RC4算法
- 【寒江雪】高级数据加密标准(AES)
- android:padding和android:margin的区别
- HDU 1498 50 years, 50 colors
- 如何快速转载CSDN中的博客
- 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
- 【寒江雪】流密码与RC4
- 常用的sublime插件
- 常用TCP端口表
- Docker Swarm安装(以ubuntu为例)
- Android从零开搞系列:自定义View(2)继承RecyclerView实现下拉刷新和加载更多
- javascript+canvas实现小游戏-贪吃蛇
- 项目中遇到的子类父类方法执行顺序
- 写博客的开始
- 多线程的同步