RC4加密算法C++实现
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
- 对S表进行线性填充:SI=I, 0 ≤I<255
- 用密钥填充另一个256字节的数组K,如果密钥长度小于256字节,则依次重复填充,直至填满这个数组, K0, K1, …, K255
- 对于I=0到255重复以下步骤:
(1) J=J+SI+KI mod 256
(2) 交换SI和SJ
S表的开始256个状态舍弃则更安全
RC4输出密钥流字节z的算法
- I=0,J=0
- I=I+1 mod 256
- J=J+SI mod 256
- 交换SI和SJ
- t=SI+SJ mod 256
- 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++实现相关推荐
- 网络信息安全:RC4加密算法的实现
前言 这次记录下RC4加密算法的C++实现过程. RC4知识储备 RC4于1987年提出,和DES算法一样,是一种对称加密算法,也就是说使用的密钥为单钥(或称为私钥).但不同于DES的是,RC4不是对 ...
- RC4加密算法及其实现
RC4加密算法(http://en.wikipedia.org/wiki/RC4)是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇.之所以称其为簇, ...
- python实现RC4加密算法
python实现RC4加密算法 RC4加密算法是一种对称的加密算法,加密解密用一个函数即可完成.在网上有好多实现算法写的非常复杂,加密解密用了两个不同的方法.因此在这里分享一个Python实现的RC4 ...
- 解析 RC4 加密算法(C语言、python)
目录 解析 RC4 加密算法(C语言.python): RC4加密算法是一种对称加密算法: 加密(解密)原理: RC4算法中的几个关键变量: RC4代码介绍: rc4初始化介绍: 包含三个参数: RC ...
- RC4加密算法初次接触以及深入学习
简单介绍: RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇.RC4算法是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电 ...
- RC4加密算法的原理及实现
RC4于1987年提出,和DES算法一样,是一种对称加密算法,也就是说使用的密钥为单钥(或称为私钥).但不同于DES的是,RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密 ...
- rc4算法安全漏洞_RC4攻击:RC4加密算法能否保护SSL/TLS?
您能介绍一下最近在RC4加密算法中发现的问题吗?对此,HTTPS网络连接面临怎样的安全隐患?企业应该如何确保他们不会受到这个漏洞带来的攻击? Michael Cobb:RC4(Rivest密码4)由R ...
- rc4加密算法 php,php 实现RC4加密解密
RC4算法 RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇.RC4算法是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电 ...
- RC4加密算法原理与C#实现
RC4算法的特点是算法简单,运行速度快,而且密钥长度是可变的,可变范围为1-256字节(8-2048比特), 在如今技术支持的前提下,当密钥长度为128比特时,用暴力法搜索密钥已经不太可行, ...
- rc4加密算法c语言代码,RC4加密算法C语言实现.docx
页眉 页眉 PAGE PAGE # / 6 RC4 加密算法 C 语言实现 代码文件名 RC4.cpp Encrypt.h (代码详见后文) 备注:将以上两个文件放在相同的路径(建议不要放在中文路径下 ...
最新文章
- MyBatis3 xml映射文件配置
- 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第一章——自编解析与答案
- 高精度——A+B Problem(洛谷 P1601)
- Titanium系列--对Window和View的一点理解
- Dell服务器中Lsiutil命令常见使用
- 定制Dynamics CRM标准导出功能:不能导出指定列的值
- 天书般的ICTCLAS分词系统代码(二)
- 【预测模型】基于遗传算法优化最小二乘支持向量机lssvm实现数据预测matlab代码
- opencv学习笔记(三)颜色转换 cvtColor
- postman控制台打印数据
- ppt编辑数据链接文件不可用_ppt插入图表数据不能编辑怎么办
- nas主流服务器,NAS以及服务器
- 按位与、按位异或、按位取反
- 程序员的遮羞布:这个需求技术上无法实现
- python文件存储为json格式_python 储存文件json
- 在线工具大全,在线办公
- OpenMV与Arduino通信—串口
- 2017cad光标大小怎么调_cad光标设置,小编教你CAD的十字光标如何设置大小
- Windows10更新后耳机没声音
- Centos通过yum安装Jenkins