页眉

页眉

PAGE

PAGE # / 6

RC4 加密算法 C 语言实现

代码文件名

RC4.cpp Encrypt.h (代码详见后文) 备注:将以上两个文件放在相同的路径(建议不要放在中文路径下)编译执行! 编译环境

Microsoft Visual C++ 6.0

C-Free 5.0

代码解释

RC4 加密算法是大名鼎鼎的 RSA 三人组中的头号人物 Ron Rivest 在 1987 年设计的密钥 长度可变的流加密算法簇。之所以称其为簇, 是由于其核心部分的 S-box 长度可为任意,但 一般为 256字节。该算法的速度可以达到 DES 加密的 10倍左右。

RC4 算法的原理很简单, 包括初始化算法和伪随机子密码生成算法两大部分。 假设 S-box 长度和密钥长度均为为n。先来看看算法的初始化部分(用类 C伪代码表示):

for (i=0; i

s=i;

j=0;

for (i=0; i

{

j=(j+s+k)%256;

swap(s, s[j]);

}

在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的每个元素都得到

处理, j 保证 S-box 的搅乱是随机的。而不同的 S-box 在经过伪随机子密码生成算法的处理 后可以得到不同的子密钥序列,并且,该序列是随机的:

i=j=0;

while ( 明文未结束 )

{

++i%=n;

j=(j+s)%n;

swap(s, s[j]);

sub_k=s((s+s[j])% n);

}

得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。

RC4加密算法在 C++中的实现:

RC4函数(加密/解密):其实RC4只有加密,将密文再加密一次,就是解密了。

GetKey函数:随机字符串产生器。

ByteToHex函数:把字节码转为十六进制码,一个字节两个十六进制。十六进制字符串 非常适合在HTTP中传输。

HexToByte函数:把十六进制字符串,转为字节码。。

Encrypt函数:把字符串经 RC4加密后,再把密文转为十六进制字符串返回,可直接用 于传输。

Decrypt函数:直接密码十六进制字符串密文,再解密,返回字符串明文。

源代码

以下为 Encrypt.h文件代码

#ifndef _ENCRYPT_RC4_

#defi ne _ENCRYPT_RC4_

#in clude

#defi ne BOX_LEN 256

int GetKey(c onst un sig ned char* pass, int pass_le n, un sig ned char *out);

int RC4(c onst un sig ned char* data, int data_le n, const un sig ned char* key, int key_le n, un sig ned char* out, i nt* out_le n);

static void swap_byte( un sig ned char* a, un sig ned char* b);

char* En crypt(co nst char* szSource, const char* szPassWord); // 加密,返回加密结果

char* Decrypt(co nst char* szSource, con st char* szPassWord); // 解密,返回解密结果

char* ByteToHex(c onst un sig ned char* vByte, const int vLe n); //把字节码pbBuffer转为十六进

制字符串,方便传输

unsigned char* HexToByte(const char* szHex); //把十六进制字符串转为字节码pbBuffer,解

#e ndif // #ifndef _ENCRYPT_RC4_

以下为RC4.cpp文件代码

//

//版权信息

//

//

#in elude

#in elude

#i nclude

#in elude "En crypt.h".

const int max n=256+10;

char* En crypt(co nst char* szSource,

rc4加密算法c语言代码,RC4加密算法C语言实现.docx相关推荐

  1. rsa2048加密算法c语言代码,rsa加密算法c语言代码

    如何用C语言实现RSA算法? 上学期交的作业,已通过老师在运行时间上的测试 #include #include unsigned long prime1,prime2,ee; unsigned lon ...

  2. 牛逼c语言代码,这段c语言代码牛逼在哪?

    原标题:这段c语言代码牛逼在哪? 有人说C语言是世界上最牛逼的语言,因为操作系统就是用C语言编写的,学好了C才能更好的学习其他编程语言.为此,有人分享了下面一段代码,说是很牛逼的c语言代码,看得W3C ...

  3. 图形基本变换c语言代码,图形变换-C语言课程设计.doc

    学号 <> 课程设计报告 图形变换网络工程班级:16(3)姓名:指导教师:成绩: 计算机学院 2017 年 5月 10日 目录- 1 - 1 设计要求- 2 - 2 程序功能- 2 - 3 ...

  4. c语言代码先来先服务算法_C语言十大经典排序算法(动态演示+代码,值得收藏)...

    以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. 时间.空间复杂度比较 排序算法 平均时间复杂度 最差时间复杂度 空间复杂度 数据对象 ...

  5. 趣味c语言代码,趣味程序C语言

    <趣味程序C语言>由会员分享,可在线阅读,更多相关<趣味程序C语言(36页珍藏版)>请在人人文库网上搜索. 1.趣味程序导学C语言,你玩过电脑游戏吗?,你喜欢电脑游戏吗?,电脑 ...

  6. java语言代码大全_Java常用语言汇总

    Java有哪些常用语?不介绍Java 常用语,对Java 的总体介绍就是不完整的.尽管促使Java 诞生的源动力是可移植性和安全性,但在Java 语言终成型的过程中,其他一些因素也起了重要的作用.接下 ...

  7. 飞机大战C语言代码百度云,C语言代码实现飞机大战

    本文实例为大家分享了C语言实现简单飞机大战的具体代码,供大家参考,具体内容如下 这个游戏的功能很单一,也就是"飞机大战",哈哈哈哈.总共只有300多行代码左右,你也可以想想它会有多 ...

  8. html语言代码游戏,常用html语言代码

    大标题代码: A part of me 透明flash特效代码: 加入背景音乐代码: type=audio/x-ms-wma LOOP="TRUE" AUTOSTART=" ...

  9. 各国语言代码,对于多语言软件非常有用!

    af 南非荷兰语 sq 阿尔巴尼亚语 ar-sa 阿拉伯语(沙特阿拉伯) ar-iq 阿拉伯语(伊拉克) ar-eg 阿拉伯语(埃及) ar-ly 阿拉伯语(利比亚) ar-dz 阿拉伯语(阿尔及利亚 ...

最新文章

  1. 0x58 数据结构优化DP
  2. elasticsearch扩展ik分词器词库
  3. 即使是一个技术人员,也需要知道沟通的重要性
  4. 阿里云ARMS重磅推出小程序监控,助力小程序稳定运行
  5. 自己封装一个弹框插件
  6. 怎么让wegame适应屏幕大小_iOS的五大设计原则:统一化和适应化原则
  7. [转载]url带中文参数显示乱码的问题
  8. leetcode Course Schedule II
  9. 如何使用String获取字符串中某一个字符后面的所有字符?
  10. Window mobile 实现CLIST始终选中最新添加数据
  11. 数字信号处理--FFT与蝶形算法--学习笔记
  12. 谈谈我见到的杨钰莹是什么样子
  13. 如何将域名转换为ip
  14. 无人机斜影(倾斜摄影)数据(OSGB)转 Cesium 3dtile 数据归纳总结以及亲测可用示例
  15. 做软文营销发布有哪些常见平台?
  16. 我想做安卓开发,怎么系统学习?
  17. 批量合并多个PDF文件
  18. 空域图像增强-图像灰度变换
  19. SQL Server—T-SQL编程
  20. xcode 正确的使用断点

热门文章

  1. 斯坦福大学电子皮肤,希望赐予机器人如人类般敏感而优质的触觉|Science Robotics发布
  2. operater运算符模块
  3. android mvp模式鸿洋,Android上的MVP模式
  4. Virtual Box配置虚拟机网络
  5. volatile适用场合
  6. 数据库题目之关系数据库标准语言SQL
  7. MySql数据库基本练习题(带答案)
  8. ubuntu18.4 安装 wps 2019
  9. 【PSO】基本PSO算法
  10. python爬虫五大解析器