zoukankan      html  css  js  c++  java
  • CryEntryBuffer

    简单的RC4代码加密实现

    struct rc4_state
    {
        int x, y, m[256];
    };
    
    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;
    }
    
    BOOL EntryptionBuf(char* Buf, DWORD dwlen)
    {
    	BYTE rc4_key[8] = {0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF};
    	rc4_state rc4_test;		
    	memset(&rc4_test, 0, sizeof(rc4_test));
    
    	try
    	{
    		rc4_setup(&rc4_test, rc4_key, 8);
    		rc4_crypt(&rc4_test, (unsigned char*)Buf, dwlen);
    	}
    	catch (...)
    	{
    		return FALSE;		
    	}
    
    	return TRUE;
    }
    
    int main()
    {
       EntryptionBuf(youBuf,youBufSize);
    }
    
    
  • 相关阅读:
    ExpandoObject与DynamicObject的使用
    ManualResetEvent 线程通信
    CancellationTokenSource 取消任务
    SQL Server 每日一题--老二解析
    说说 C# 8 using 新特性
    SQL Server 每日一题--老二
    C#中的坑--浮点类型
    开胃菜解析
    开胃菜
    快速入门 Arrow 日期处理库
  • 原文地址:https://www.cnblogs.com/iBinary/p/11975747.html
Copyright © 2011-2022 走看看