RC4对称加密技术
- MD DocUmEnT: 3/14/2016 04:57:54 AM by Jimbowhy
- PDF版下载:http://download.youkuaiyun.com/detail/winsenjiansbomber/9461896
背景资料
1987年,Ron Rivest 为他的公司 RSA Data Security, Inc. 发明了 RC4 加密系统,加密过程十分简洁明了,以致可以用大多数据语言重新编写。纳德·李维斯特 Ronald L. Rivest,就是 RSA 非对称加密算法的主要作者。和DES算法一样,RC4 是一种对称加密算法,也就是说使用同一个密钥来实现加密与解密,或者说对明文进行一次加密得到密文,对密文进行一次加密就可以得到明文。和DES不同于的是,RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。这种加密方式又称流式加密,RC4 是应用最广泛的流加密算法,应用在安全套接字层 SSL Security Socket layer 来保护网络上传输的数据,也应用于网络数据保护 WEP Wired Equivalent Privacy,而新的无线网络数据保护 WPA Wi-Fi Protected Access 已经取代了它在这方面的应用。
RC4官方名是“Rivest Cipher 4”,RC4是商业密码,是在94年9月份的时候,被人匿名公开在了Cypherpunks 邮件列表上,很快它就被发到了sci.crypt 新闻组上,随后从这儿传播到了互联网的许多站点。随之贴出的代码后来被证明是很有水平的,因为它的输出跟取得了RC4版权的私有软件的输出是完全的。由于算法已经公开,RC4也就不再是商业秘密了,只是它的名字“RC4”仍然是一个注册商标。RC4经常被称作是“ARCFOUR”或者”ARC4”,因为RSA从来没有官方公布这个算法,这样来避免商标使用的问题。
它的最大亮点是算法的简单性和快速处理,因此它可以很容易多种语言上实现。设有一个256字节的数组,用它来加密明文 plaintext,每使用一次,数组的就要交换其中两个字节。被交换的两个字节通过变量 i j 来指定,它们初始值为 0。计算 i 的新值时,直接加一,计算 j 的新值时,将 i 数值对应的数组字节值和密钥字节值相加得到。要得到密文 ciphertext,将明文和 i j 求和后指示的字节相异或 XOR,加密 encrypt 和解密 decrypt 的过程一样。然后交换 i j 指示的数组字节,所有操作都对256求模,数组使用前经过初始化,值依次为 0-255。密钥长度在 1-256字节,以下就是C语言实现的RC4算法:
/*
* RC4 encryption by Jimbowhy
* @key : password whin 256 bytes
* @p : plaintext/chipher to encrypt/decrypt, MODIFIED
*/
string RC4(string key, string &p){
unsigned int k = 0, lk = key.length(), lp = p.length(), mod = 256;
unsigned char *sbox = (unsigned char *)malloc(mod);
unsigned char i = 0, j = 0;
for(i=