# RC4 Encryption Algorithm

**RC4 **is a stream cipher and variable length key algorithm. This algorithm encrypts one byte at a time (or larger units on a time).

A key input is pseudorandom bit generator that produces a stream 8-bit number that is unpredictable without knowledge of input key, The output of the generator is called key-stream, is combined one byte at a time with the plaintext stream cipher using X-OR operation.

**Example:**

RC4 Encryption 10011000 ? 01010000 = 11001000 RC4 Decryption 11001000 ? 01010000 = 10011000

**Key-Generation Algorithm –**

A variable-length key from 1 to 256 byte is used to initialize a 256-byte state vector S, with elements S[0] to S[255]. For encryption and decryption, a byte k is generated from S by selecting one of the 255 entries in a systematic fashion, then the entries in S are permuted again.

**Key-Scheduling Algorithm:**

**Initialization**: The entries of S are set equal to the values from 0 to 255 in ascending order, a temporary vector T, is created.

If the length of the key k is 256 bytes, then k is assigned to T. Otherwise, for a key with length(k-len) bytes, the first k-len elements of T as copied from K and then K is repeated as many times as necessary to fill T. The idea is illustrated as follow:`for`

`i =`

`0`

`to`

`255`

`do`

`S[i] = i;`

`T[i] = K[i mod k - len];`

*chevron_right**filter_none*we use T to produce the initial permutation of S. Starting with S[0] to S[255], and for each S[i] algorithm swap it with another byte in S according to a scheme dictated by T[i], but S will still contain values from 0 to 255 :

`j =`

`0`

`;`

`for`

`i =`

`0`

`to`

`255`

`do`

`{`

`j = (j + S[i] + T[i])mod`

`256`

`;`

`Swap(S[i], S[j]);`

`}`

*chevron_right**filter_none***Pseudo random generation algorithm (Stream Generation):**

Once the vector S is initialized, the input key will not be used. In this step, for each S[i] algorithm swap it with another byte in S according to a scheme dictated by the current configuration of S. After reaching S[255] the process continues, starting from S[0] again

`i, j =`

`0`

`;`

`while`

`(`

`true`

`)`

`i = (i +`

`1`

`)mod`

`256`

`;`

`j = (j + S[i])mod`

`256`

`;`

`Swap(S[i], S[j]);`

`t = (S[i] + S[j])mod`

`256`

`;`

`k = S[t];`

*chevron_right**filter_none***Encrypt using X-Or():**

**News**:

In September 2015, Microsoft announced the end of using RC4 in Microsoft edge and internet explorer 11.

This video gives a clear example of RC4 algorithm

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

## Recommended Posts:

- RC5 Encryption Algorithm
- ElGamal Encryption Algorithm
- Knapsack Encryption Algorithm in Cryptography
- What is E2EE(End to End Encryption)?
- Public Key Encryption
- Encryption, Its Algorithms And Its Future
- Data encryption standard (DES) | Set 1
- Difference between Encryption and Decryption
- Difference Between Symmetric and Asymmetric Key Encryption
- Image encryption using cellular automata
- Strength of Data encryption standard (DES)
- End to End Encryption (E2EE) in Computer Networks
- Cristian's Algorithm
- Difference between RSA algorithm and DSA
- RSA Algorithm in Cryptography
- Berkeley's Algorithm
- Relabel-to-front Algorithm
- How to solve RSA Algorithm Problems?
- C-LOOK Disk Scheduling Algorithm
- Back-off Algorithm for CSMA/CD

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.