rc4加密算法
rc4算法,详情可以看下这个文档
流密码与RC4算法
/** * rc4加密算法 * 加密原理: * 先了解一下流密码的结构: * 密钥输入到一个伪随机数(比特)发生器中,输出一串8比特的随机数,称为密钥流;密钥流通过与同一时刻的明文进行异或运算产生密文; * 1 , 通过密钥调度算法KSA初始化状态矢量S(S就是一个随机数发生器,称为S-box) * 2 , 再通过伪随机数生成算法PRGA得到密钥流keystream * 3 , 密钥流keystream 与明文进行xor运算得到密文) * 解密用 密钥流与密文xor * Wiki: http://en.wikipedia.org/wiki/RC4 */ #includestatic 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) (x3chun@korea.com or x3chun@hanyang.ac.kr) ( 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