zoukankan      html  css  js  c++  java
  • 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
     */
     #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)
    		(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
    
    
    
  • 相关阅读:
    表单文件上传
    页面布局
    HDU 2089 不要62
    洛谷 P1776 宝物筛选(多重背包)
    HDU 5569 matrix
    洛谷 P1244 青蛙过河
    洛谷 P2362 围栏木桩
    洛谷 P2719 搞笑世界杯
    洛谷 P1877 [HAOI2012]音量调节
    洛谷 P1569 [USACO11FEB]属牛的抗议Generic Cow Prote…
  • 原文地址:https://www.cnblogs.com/trying/p/2863723.html
Copyright © 2011-2022 走看看