📄 rc4.c
字号:
#include "rc4.h"
void rc4_setup( struct rc4_state *s, unsigned char *key, int length )
{
int i, j, k, *m, a;
s->x = 0;
s->y = 0;
m = s->m;
for( i = 0; i < 256; i++ )
{
m[i] = i;
}
j = k = 0;
for( i = 0; i < 256; i++ )
{
a = m[i];
j = (unsigned char) ( j + a + key[k] );
m[i] = m[j]; m[j] = a;
if( ++k >= length ) k = 0;
}
}
void rc4_crypt( struct rc4_state *s, unsigned char *data, int length )
{
int i, x, y, *m, a, b;
x = s->x;
y = s->y;
m = s->m;
for( i = 0; i < length; i++ )
{
x = (unsigned char) ( x + 1 ); a = m[x];
y = (unsigned char) ( y + a );
m[x] = b = m[y];
m[y] = a;
data[i] ^= m[(unsigned char) ( a + b )];
}
s->x = x;
s->y = y;
}
VOID
EncryptBuf_128RC4(
IN OUT PBYTE Buf,
IN ULONG Length
)
{
ULONG Offset = 0;
ULONG i=0;
struct rc4_state *s = NULL;
UCHAR keys[8]={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef};
UCHAR buffer[1024];
s =ExAllocatePool(NonPagedPool, sizeof(struct rc4_state));
//注意:以1024为基本单位加密
for (Offset=0; Offset<Length; Offset+=1024)
{
rc4_setup(s, keys, 8);
memcpy(buffer, Buf+Offset, 1024);
rc4_crypt(s, buffer, 1024);
memcpy(Buf+Offset, buffer, 1024);
}
ExFreePool(s);
//for (i=0; i<Length; i++) Buf[i] ^= 0xff;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -