34 lines
1.4 KiB
Plaintext
34 lines
1.4 KiB
Plaintext
RC4 overview
|
|
============
|
|
:title: Shellcode Compiler Runtime
|
|
|
|
To use the RC4 encryption functions, first call link:rc4_init.html[rc4_init] with the desired key to initialize
|
|
the cipher state. RC4 can use the same functions for both encryption and decryption. Once initialized, the
|
|
link:rc4_crypt.html[rc4_crypt] function can be called to encrypt or decrypt data. Alternatively, the
|
|
link:rc4_output.html[rc4_output] function can be used to directly access the key stream (XOR each byte with
|
|
the output of this function to encrypt or decrypt data).
|
|
|
|
IMPORTANT: It is recommended that the first bytes of the key stream for RC4 is discarded. To do this, call
|
|
the link:rc4_output.html[rc4_output] a number of times. Ensure that the same number of bytes is discarded
|
|
on both sides of the communication.
|
|
|
|
WARNING: Do not encrypt multiple sessions using the same key. RC4 is very vulnerable to cryptography attacks
|
|
if the same key is used to encrypt two different streams (this is why WEP is so easy to break).
|
|
|
|
Example
|
|
-------
|
|
The following example will set up an RC4 cipher context and encrypt a string.
|
|
|
|
-------------------------------------------
|
|
void main()
|
|
{
|
|
rc4_state_t rc4;
|
|
char* key = "thereisnocowlevel";
|
|
rc4_init(&rc4, key, strlen(key));
|
|
char* str = "pwniesinstead";
|
|
size_t len = strlen(str);
|
|
rc4_crypt(&rc4, str, len);
|
|
write(1, str, len);
|
|
}
|
|
-------------------------------------------
|