首页 > 代码库 > RC4加密算法及其实现
RC4加密算法及其实现
RC4加密算法(http://en.wikipedia.org/wiki/RC4)是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。RC4起初是用于保护商业机密的。但是在1994年9月,它的算法被发布在互联网上,也就不再有什么商业机密了。RC4也被叫做ARC4(Alleged RC4——所谓的RC4),因为RSA从来就没有正式发布过这个算法。
RC4的原理很简单,包括初始化算法(KSA/SetKey)和伪随机子密码生成算法(PRGA/Transform)两大部分。实现代码如下(VS2008):
[cpp] view plaincopy
- //rc4.h
- template<class T> inline void
- swap(T& i, T& j)
- {
- T tmp = i;
- i = j;
- j = tmp;
- }
- class RC4
- {
- public:
- void SetKey(const char* key, int keylen);
- void Transform(char* output, const char* input, int len);
- private:
- unsigned char key_[256];
- };
- /////////////////////////////////////////////
- //rc4.cc
- #include "rc4.h"
- void RC4::SetKey(const char* key, int keylen)
- {
- for (int i = 0; i < 256; i++)
- {
- key_[i] = i;
- }
- int j = 0;
- for (int i = 0; i < 256; i++)
- {
- j = (j + key_[i] + key[i%keylen]) % 256;
- swap(key_[i], key_[j]);
- }
- }
- void RC4::Transform(char* output, const char* input, int len)
- {
- int i = 0, j = 0;
- for (int k = 0; k < len; k++)
- {
- i = (i + 1) % 256;
- j = (j + key_[i]) % 256;
- swap(key_[i], key_[j]);
- unsigned char subkey = key_[(key_[i] + key_[j]) % 256];
- output[k] = subkey ^ input[k];
- }
- }
- /////////////////////////////////////////
- //main.cc
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include "rc4.h"
- int main()
- {
- char input[256] = "Times teaches all things to him who lives forever but I have not the luxury of eternity.";
- char output[256] = "";
- printf("before encrypt:%s/n", input);
- const int keylen = 16;
- char key[keylen] = "";
- for (int i = 0; i < keylen; i++)
- {
- key[i] = rand() % 256;
- }
- RC4 rc4encrypt, rc4decrypt;
- rc4encrypt.SetKey(key, keylen);
- rc4decrypt.SetKey(key, keylen);
- rc4encrypt.Transform(output, input, strlen(input));
- printf("after encrypt: %s/n", output);
- rc4decrypt.Transform(output, output, strlen(input));
- printf("after decrypt: %s/n", output);
- return 0;
- }
RC4加密算法及其实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。