RC4算法简介

RC4是由Rivest于1987年设计的一种序列密码,被广泛应用于Windows和无线通信系统等;
RC4是一种基于字节的序列的非移位寄存器序列,输出字节流;
RC4使用了一个28字节大小的非线性数据表(简称S表);S表的值S0, S1, …, S255是数字0到255的一个排列。对S表进行非线性变换,得到密钥流;
RC4支持不同密钥长度,美国政府规定用于出口的密钥长度不得超过40位。
RC4算法简单、高效,特别适合软件实现,加密速度比DES大约快10倍

在WLAN的WEP协议中,支持 64 位和128 位加密,由于密钥是5或13个ASCII 字符,64 位加密有时称为 40 位加密;128 位加密有时称为 104 位加密。其中的24bit由初始化向量填充,但因为初始向量太短而不安全,若正确使用密钥,则RC4依然安全

RC4算法原理

RC4对S表的初始化算法: 两个计数器I和J,I=0,J=0

  1. 对S表进行线性填充:SI=I, 0 ≤I<255
  2. 用密钥填充另一个256字节的数组K,如果密钥长度小于256字节,则依次重复填充,直至填满这个数组, K0, K1, …, K255
  3. 对于I=0到255重复以下步骤:
    (1) J=J+SI+KI mod 256
    (2) 交换SI和SJ

S表的开始256个状态舍弃则更安全

RC4输出密钥流字节z的算法

  1. I=0,J=0
  2. I=I+1 mod 256
  3. J=J+SI mod 256
  4. 交换SI和SJ
  5. t=SI+SJ mod 256
  6. z=St .

C++实现

加密函数为char* RC4(char* C,char* key)(解密只需再做一次RC4加密)
另外还有两个辅助函数void char_2_Hex(char* Char, char* Hex) void Hex_2_char(char*Hex, char* Char)用于将char型字符串与16进制(以字符串保存)互转

#include <iostream>
#include <string.h>
using namespace std;//char -> 16
void char_2_Hex(char* Char, char* Hex)
{int length = strlen(Char);for (size_t i = 0; i < length; i++){int tmp = int(Char[i]);if(Char[i] < 0)tmp = (-1) * Char[i] + 128;int high = tmp / 16;int low = tmp % 16;char HIHG;char LOW;if(high >= 10)HIHG = char(high - 10 + 65);elseHIHG = char(high + 48);if(low >= 10)LOW = char(low - 10 + 65);elseLOW = char(low + 48);Hex[2*i] = HIHG;Hex[2*i+1] = LOW;}
}//16 -> char
void Hex_2_char(char*Hex, char* Char)
{int length = strlen(Hex) / 2;for (size_t i = 0; i < length; i++){int high;int low;if(int(Hex[2*i])>=65)high = int(Hex[2*i] - 65 + 10);elsehigh = int(Hex[2*i]- 48);if(int(Hex[2*i+1])>=65)low = int(Hex[2*i+1] - 65 + 10);elselow = int(Hex[2*i+1] - 48);Char[i] = char(high*16 + low);}
}char* RC4(char* C,char* key)
{int S[256];int T[256];int  count = 0;
count = strlen(key);for(int i = 0; i < 256; i++){S[i] = i;int tmp = i % count;T[i] = key[tmp];}int j = 0;for(int  i = 0; i < 256; i++){j = (j + S[i] + T[i]) % 256;int tmp;tmp = S[j];S[j] = S[i];S[i] = tmp;}int length = 0;length = strlen(C);int i,j;i=0,j=0;for(int p = 0; p < length; p++){i = (i + 1) % 256;j = (j + S[i]) % 256;int tmp;tmp = S[j];S[j] = S[i];S[i] = tmp;int k = S[(S[i] + S[j]) % 256];C[p]=C[p]^k;}return C;
}int main()
{char A[1000] = "aaaaaaaaaaa;cout << "C =" << A <<endl;char key[256] = "abcde";cout << "key = " << key <<endl;size_t  count = 0;count = strlen(A);char* B = RC4(A,key);char* M = new char[2*count]; char_2_Hex(B,M);cout<<"M = " << M<<endl;char* C = RC4(B,key);cout <<"C' =  "<<C<<endl;system("pause");return 0;
}

RC4加密算法C++实现相关推荐

  1. 网络信息安全:RC4加密算法的实现

    前言 这次记录下RC4加密算法的C++实现过程. RC4知识储备 RC4于1987年提出,和DES算法一样,是一种对称加密算法,也就是说使用的密钥为单钥(或称为私钥).但不同于DES的是,RC4不是对 ...

  2. RC4加密算法及其实现

    RC4加密算法(http://en.wikipedia.org/wiki/RC4)是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇.之所以称其为簇, ...

  3. python实现RC4加密算法

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

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

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

  5. RC4加密算法初次接触以及深入学习

    简单介绍: RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇.RC4算法是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电 ...

  6. RC4加密算法的原理及实现

    RC4于1987年提出,和DES算法一样,是一种对称加密算法,也就是说使用的密钥为单钥(或称为私钥).但不同于DES的是,RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密 ...

  7. rc4算法安全漏洞_RC4攻击:RC4加密算法能否保护SSL/TLS?

    您能介绍一下最近在RC4加密算法中发现的问题吗?对此,HTTPS网络连接面临怎样的安全隐患?企业应该如何确保他们不会受到这个漏洞带来的攻击? Michael Cobb:RC4(Rivest密码4)由R ...

  8. rc4加密算法 php,php 实现RC4加密解密

    RC4算法 RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇.RC4算法是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电 ...

  9. RC4加密算法原理与C#实现

    RC4算法的特点是算法简单,运行速度快,而且密钥长度是可变的,可变范围为1-256字节(8-2048比特),      在如今技术支持的前提下,当密钥长度为128比特时,用暴力法搜索密钥已经不太可行, ...

  10. rc4加密算法c语言代码,RC4加密算法C语言实现.docx

    页眉 页眉 PAGE PAGE # / 6 RC4 加密算法 C 语言实现 代码文件名 RC4.cpp Encrypt.h (代码详见后文) 备注:将以上两个文件放在相同的路径(建议不要放在中文路径下 ...

最新文章

  1. MyBatis3 xml映射文件配置
  2. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第一章——自编解析与答案
  3. 高精度——A+B Problem(洛谷 P1601)
  4. Titanium系列--对Window和View的一点理解
  5. Dell服务器中Lsiutil命令常见使用
  6. 定制Dynamics CRM标准导出功能:不能导出指定列的值
  7. 天书般的ICTCLAS分词系统代码(二)
  8. 【预测模型】基于遗传算法优化最小二乘支持向量机lssvm实现数据预测matlab代码
  9. opencv学习笔记(三)颜色转换 cvtColor
  10. postman控制台打印数据
  11. ppt编辑数据链接文件不可用_ppt插入图表数据不能编辑怎么办
  12. nas主流服务器,NAS以及服务器
  13. 按位与、按位异或、按位取反
  14. 程序员的遮羞布:这个需求技术上无法实现
  15. python文件存储为json格式_python 储存文件json
  16. 在线工具大全,在线办公
  17. OpenMV与Arduino通信—串口
  18. 2017cad光标大小怎么调_cad光标设置,小编教你CAD的十字光标如何设置大小
  19. Windows10更新后耳机没声音
  20. Centos通过yum安装Jenkins

热门文章

  1. 齐次坐标与非齐次坐标
  2. EXT4文件系统磁盘分布和部分特性介绍
  3. html页码制作的代码大全,HTML中的页码代码.pdf
  4. 信息流广告投放,如何实现从0-1的破局
  5. 小红书22届校招薪资待遇怎么样?值得进吗?
  6. PostgreSQL学习篇9.14 XML类型
  7. 基于内容的图像检索软件库LIRE的特征提取方法综述
  8. 标准FSK调制解调matlab仿真
  9. 如何实现JavaScript猜数字小游戏
  10. 什么是更适合中国企业的CRM选型标准?