rc4算法,详情可以看下这个文档 流密码与RC4算法
/**
* rc4加密算法
* 加密原理:
* 先了解一下流密码的结构:
* 密钥输入到一个伪随机数(比特)发生器中,输出一串8比特的随机数,称为密钥流;密钥流通过与同一时刻的明文进行异或运算产生密文;
* 1 , 通过密钥调度算法KSA初始化状态矢量S(S就是一个随机数发生器,称为S-box)
* 2 , 再通过伪随机数生成算法PRGA得到密钥流keystream
* 3 , 密钥流keystream 与明文进行xor运算得到密文)
* 解密用 密钥流与密文xor
* Wiki: http://en.wikipedia.org/wiki/RC4
*/
#include
static void swapNoTemp(unsigned char* x, unsigned char* y)
{
*x = *x ^ *y ;
*y = *x ^ *y ;
*x = *x ^ *y ;
}
static void printText(unsigned char* Text, int length)
{
int i ;
for(i=0;i
再附上一个汇编代码:(不是我写的,在看雪学院
http://www.pediy.com/sourcecode/cryptography.htm上看到的)
comment *
Algorithm : RC4 ( Stream Cipher )
Usage : invoke rc4_setkey,addr ptrInkey,addr ptrInkey_length
invoke rc4_crypt,addr ptrIndata,addr ptrIndata_length ( Encrypt & Decrypt )
Coded by x3chun (2003.11.22)
([email protected] or [email protected]) ( http://x3chun.wo.to )
comment *
rc4_setkey proto :DWORD, :DWORD
rc4_crypt proto :DWORD, :DWORD
.data?
rc4keytable db 256 dup(?)
.code
rc4_setkey proc ptrInkey:DWORD, ptrInkey_length:DWORD
xor ebx,ebx
@_r1:
mov [rc4keytable+ebx],bl
inc ebx
cmp ebx,256
jnz @_r1
mov esi,ptrInkey
xor eax,eax
xor ebx,ebx
xor ecx,ecx
xor edi,edi
@_r3:
mov al,[rc4keytable+ecx]
add bl,byte ptr [esi+edi]
add bl,al
mov dl,[rc4keytable+ebx]
mov [rc4keytable+ecx],dl
mov [rc4keytable+ebx],al
inc edi
cmp edi,ptrInkey_length
jl @_r2
xor edi,edi
@_r2:
inc ecx
cmp ecx,256
jnz @_r3
ret
rc4_setkey endp
rc4_crypt proc ptrIndata:DWORD, ptrIndata_length:DWORD
xor eax,eax
xor ebx,ebx
xor edi,edi
xor edx,edx
mov esi,ptrIndata
@_r1:
mov cl,[rc4keytable+1+eax]
add dl,cl
mov bl,[rc4keytable+edx]
mov [rc4keytable+edx],cl
add bl,cl
mov bl,[rc4keytable+ebx]
xor [esi+edi],bl
inc eax
inc edi
cmp ptrIndata_length,edi
jnz @_r1
ret
rc4_crypt endp