<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=RC4</id>
	<title>RC4 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=RC4"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=RC4&amp;action=history"/>
	<updated>2026-07-13T15:18:35Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=RC4&amp;diff=1984034&amp;oldid=prev</id>
		<title>imported&gt;Unmasked0666：​/* 虛擬碼 */ 修正笔误</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=RC4&amp;diff=1984034&amp;oldid=prev"/>
		<updated>2025-05-20T02:06:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;虛擬碼：​&lt;/span&gt; 修正笔误&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{expand|time=2012-11-15T11:53:52+00:00}}&lt;br /&gt;
{{术语}}&lt;br /&gt;
{{区块加解密方块&lt;br /&gt;
| name           = RC4&lt;br /&gt;
| image          = &lt;br /&gt;
| caption        = &lt;br /&gt;
&amp;lt;!-- General --&amp;gt;&lt;br /&gt;
| designers      = [[罗纳德·李维斯特]]&lt;br /&gt;
| publish date   = 1994年對外公布&amp;lt;br/&amp;gt;(1987年設計)&lt;br /&gt;
| series         = &lt;br /&gt;
| derived from   = &lt;br /&gt;
| derived to     = &lt;br /&gt;
| related to     = &lt;br /&gt;
| certification  = &lt;br /&gt;
&amp;lt;!-- Detail --&amp;gt;&lt;br /&gt;
|key size       = 40–{{val|2048}} 比特（bits）&lt;br /&gt;
|structure      =&lt;br /&gt;
|state size     = {{val|2064}} bits ({{val|1684}} effective)&lt;br /&gt;
|rounds        = 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
在[[密碼學]]中，&amp;#039;&amp;#039;&amp;#039;RC4&amp;#039;&amp;#039;&amp;#039;（來自{{lang|en|Rivest Cipher 4}}的縮寫）是一種[[串流加密法]]，[[密鑰]]长度可变。它加解密使用相同的密钥，因此也属于[[对称加密|对称加密算法]]。RC4是[[有线等效加密]]（WEP）中采用的加密算法，也曾经是[[传输层安全协议|TLS]]可采用的算法之一。&lt;br /&gt;
&lt;br /&gt;
RC4是由美國密碼學家[[羅納德·李維斯特]]（{{lang|en|Ronald Rivest}}）在1987年设计的。由于RC4算法存在弱点，2015年2月所發佈的 RFC 7465 规定禁止在TLS中使用RC4加密算法&amp;lt;ref&amp;gt;{{cite web|url=https://tools.ietf.org/html/rfc7465|title=Prohibiting RC4 Cipher Suites|publisher=IETF|date=February 2015|accessdate=2015-02-18|author=Andrei Popov|archive-date=2015-02-20|archive-url=https://web.archive.org/web/20150220174232/https://tools.ietf.org/html/rfc7465|dead-url=no}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
RC4由[[伪随机数]]生成器和[[异或]]运算组成。RC4的密钥长度可变，范围是[1,255]。RC4一个字节一个字节地加解密。给定一个密钥，伪随机数生成器接受密钥并产生一个[[S盒]]。S盒用来加密数据，而且在加密过程中S盒会变化。&lt;br /&gt;
&lt;br /&gt;
由于[[异或|异或运算]]的[[对合|对合性]]，RC4加密解密使用同一套算法。&lt;br /&gt;
&lt;br /&gt;
==歷史==&lt;br /&gt;
RC4是由[[RSA Security]]的[[罗纳德·李维斯特]]在1987年开发出来的，虽然它的官方名是“Rivest Cipher 4”，但是首字母缩写RC也可以理解为&amp;quot;Ron&amp;#039;s Code&amp;quot;&amp;lt;ref&amp;gt;{{Cite web |url=http://people.csail.mit.edu/rivest/faq.html#Ron |title=Rivest FAQ |access-date=2017-06-18 |archive-url=https://web.archive.org/web/20170715072137/http://people.csail.mit.edu/rivest/faq.html#Ron |archive-date=2017-07-15 |dead-url=yes }}&amp;lt;/ref&amp;gt;。（见[[RC2]]，[[RC5]]，[[RC6]]）&lt;br /&gt;
&lt;br /&gt;
RC4开始时是[[商业机密]]，没有公开发表出来，但是在1994年9月份的时候，它被人匿名公开在了Cypherpunks 邮件列表上，很快它就被发到了sci.crypt 新闻组上，随后从这传播到了互联网的许多站点。随之贴出的代码后来被证明是真实的，因为它的输出跟取得了RC4版权的私有软件的输出是完全相同的。由于算法已经公开，RC4也就不再是商业秘密了，只是它的名字“RC4”仍然是一个注册商标。RC4经常被称作是“ARCFOUR”或者&amp;quot;ARC4&amp;quot;（意思是称为RC4），这样来避免商标使用的问题。RSA Security从来没有正式公布这个算法，罗纳德·李维斯特在2008年的自己的课程笔记中给出了一个指向RC4的[[英文维基百科]]文章的链接，并且在2014年的文件&amp;lt;ref&amp;gt;Rivest, Ron; Schuldt, Jacob (27 October 2014). [http://people.csail.mit.edu/rivest/pubs/RS14.pdf &amp;quot;Spritz – a spongy RC4-like stream cipher and hash function&amp;quot; (PDF)] {{Wayback|url=http://people.csail.mit.edu/rivest/pubs/RS14.pdf |date=20170428231945 }}. Retrieved 26 October 2014.&amp;lt;/ref&amp;gt;中确认了RC4及其代码的历史。&lt;br /&gt;
&lt;br /&gt;
RC4已经成为一些协议和标准的一部分，如1997年的[[WEP]]和2003年的[[WPA]]；和1995年的[[SSL]]，以及1999年的[[TLS]]。2015年由 RFC 7465 禁止RC4在所有版本的TLS中使用。&lt;br /&gt;
&lt;br /&gt;
== 伪代码 ==&lt;br /&gt;
初始化长度为256的[[S盒]]。第一个for循环将0到255的互不重复的元素装入S盒。第二个for循环根据密钥打乱S盒。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
 for i from 0 to 255&lt;br /&gt;
     S[i] := i&lt;br /&gt;
 endfor&lt;br /&gt;
 j := 0&lt;br /&gt;
 for( i=0 ; i&amp;lt;256 ; i++)&lt;br /&gt;
     j := (j + S[i] + key[i mod keylength]) % 256&lt;br /&gt;
     swap values of S[i] and S[j]&lt;br /&gt;
 endfor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
下面i,j是两个指针。每收到一个字节，就进行while循环。通过一定的算法（(a),(b)）定位S盒中的一个元素，并与输入字节异或，得到k。循环中还改变了S盒（(c)）。如果输入的是[[明文]]，输出的就是[[密文]]；如果输入的是密文，输出的就是明文。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
 i := 0&lt;br /&gt;
 j := 0&lt;br /&gt;
 while GeneratingOutput:&lt;br /&gt;
     i := (i + 1) mod 256   //a&lt;br /&gt;
     j := (j + S[i]) mod 256 //b&lt;br /&gt;
     swap values of S[i] and S[j]  //c&lt;br /&gt;
     k := inputByte ^ S[(S[i] + S[j]) % 256]&lt;br /&gt;
     output K&lt;br /&gt;
 endwhile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
此算法保证每256次循环中S盒的每个元素至少被交换过一次。&lt;br /&gt;
&lt;br /&gt;
==破解==&lt;br /&gt;
2015年，[[比利時]][[鲁汶天主教大学 (荷兰语)|魯汶大學]]的研究人員Mathy Vanhoef及Frank Piessens，公布了針對RC4加密演算法的新型攻擊程式，可在75小時內取得[[cookie]]的內容。&amp;lt;ref&amp;gt;http://www.rc4nomore.com {{Wayback|url=http://www.rc4nomore.com/ |date=20200818190323 }} RC4 NOMORE&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==参考文献==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
{{Cryptography navbox|stream}}&lt;br /&gt;
&lt;br /&gt;
[[Category:流密码]]&lt;br /&gt;
[[Category:已攻破的流密码]]&lt;br /&gt;
[[Category:伪随机数生成器]]&lt;br /&gt;
[[Category:免费密码]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Unmasked0666</name></author>
	</entry>
</feed>