RC4加密算法C语言实现.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
页眉 页眉 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; in; i++) s=i; j=0; for (i=0; in; 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 stri ng.h #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 iostream #in elude stri ng #i nclude stdio.h #in elude En crypt.h. const int max n=256+10; char* En crypt(co nst char* szSource, const char*

文档评论(0)

dianxin1241 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档