在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一。
由美国密码学家罗纳德·李维斯特(Ronald Rivest)在1987年设计的。由于RC4算法存在弱点,2015年2月所发布的 RFC 7465 规定禁止在TLS中使用RC4加密算法。
RC4由伪随机数生成器和异或运算组成。RC4的密钥长度可变,范围是。RC4一个字节一个字节地加解密。给定一个密钥,伪随机数生成器接受密钥并产生一个S盒。S盒用来加密数据,而且在加密过程中S盒会变化。
由于异或运算的对合性,RC4加密解密使用同一套算法。
RC4是由RSA Security的罗纳德·李维斯特在1987年开发出来的,虽然它的官方名是“Rivest Cipher 4”,但是首字母缩写RC也可以理解为"Ron's Code"。(见RC2,RC5,RC6)
RC4开始时是商业机密,没有公开发表出来,但是在1994年9月份的时候,它被人匿名公开在了Cypherpunks 邮件列表上,很快它就被发到了sci.crypt 新闻组上,随后从这传播到了互联网的许多站点。随之贴出的代码后来被证明是真实的,因为它的输出跟取得了RC4版权的私有软件的输出是完全相同的。由于算法已经公开,RC4也就不再是商业秘密了,只是它的名字“RC4”仍然是一个注册商标。RC4经常被称作是“ARCFOUR”或者"ARC4"(意思是称为RC4),这样来避免商标使用的问题。RSA Security从来没有正式公布这个算法,罗纳德·李维斯特在2008年的自己的课程笔记中给出了一个指向RC4的英文维基百科文章的链接,并且在2014年的文件中确认了RC4及其代码的历史。
RC4已经成为一些协议和标准的一部分,如1997年的WEP和2003年的WPA;和1995年的SSL,以及1999年的TLS。2015年由 RFC 7465 禁止RC4在所有版本的TLS中使用。
初始化长度为256的S盒。第一个for循环将0到255的互不重复的元素装入S盒。第二个for循环根据密钥打乱S盒。
for i from 0 to 255 S := i endfor j := 0 for( i=0 ; i<256 ; i++) j := (j + S + key) % 256 swap values of S and S endfor