资源简介

是我实现的一个RC4算法演示程序,有详细的注释,代码很清楚,一看就能明白RC4算法的原理及使用。 你,值得拥有,呵呵!

资源截图

代码片段和文件信息

/*
 * RC4 algorithm.
 *
 * Yongle Lai
 *
 * yongle_lai@hotmail.com
 */

/*
 * RC4算法的原理很简单,包括初始化算法(KSA)和伪随机子密码
 * 生成算法(PRGA)两大部分。
 *
 * 下述代码中init_kbox和init_sbox属于初始化算法部分KSA;
 * 而rc4_encrypt函数中的主要内容就是伪随机数生成器PRNG。
 */
#include 
#include 

#define SBOX_LEN 256

unsigned char sbox[SBOX_LEN];
unsigned char kbox[SBOX_LEN];

unsigned char key[] = “23456“;
#define KEY_LEN 5

unsigned char data[] = “rc4 test data!“;
#define DATA_LEN 14
unsigned char data_en[DATA_LEN];
unsigned char data_de[DATA_LEN];

/*
 * 在初始化的过程中,密钥的主要功能是将S-box搅乱,i确保S-box的
 * 每个元素都得到处理,j保证S-box的搅乱是随机的。而不同的S-box
 * 在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,
 * 并且,该序列是随机的:
 */
void init_sbox(void)
{
    int i j = 0;
    unsigned char tmp;
    
    for (i = 0; i < SBOX_LEN; i++)
        sbox[i] = i;

    for (i = 0; i < SBOX_LEN; i++)
    {
        j = (j + sbox[i] + kbox[i]) % SBOX_LEN;
        tmp = sbox[i];
        sbox[i] = sbox[j];
        sbox[j] = tmp;
    }
}

void init_kbox(void)
{
    int i j = 0;
    
    /*
     * 由于密钥串的长度较短,所以在初始化时是循环利用的。
     */
    for (i = 0; i < SBOX_LEN; i++)
        kbox[i] = key[i % KEY_LEN];
}

void rc4_encrypt(unsigned char *data unsigned char *buf int len)
{
    int i = 0 j = 0 t index = 0;
    unsigned char tmp;
    
    if (data == NULL || bu

评论

共有 条评论