111,092
社区成员




unsigned char pData[4] ={0};
*pData,*(pData+1),*(pData+2),*(pData+3)
byte[] pData = new byte[4];
*pData?
*(pData+1)?
*(pData+2)?
*(pData+3)?
#include<stdio.h>
#include<string.h>
typedef unsigned long ULONG;
void rc4_init(unsigned char *s, unsigned char *key, unsigned long Len) //初始化函数
{
int i =0, j = 0;
unsigned char k[256] = {0};
unsigned char tmp = 0;
for(i=0;i<256;i++)
{
k[i]=0x0;
}
for(i=0;i<256;i++)
{
s[i]=i;
k[i]=key[i%Len];
}
for (i=0; i<256; i++)
{
j=(j+s[i]+k[i])%256;
tmp = s[i];
s[i] = s[j]; //交换s[i]和s[j]
s[j] = tmp;
}
}
void rc4_crypt(unsigned char *s, unsigned char *Data, int Len) //加解密
{
int i = 0, j = 0, t = 0;
int k = 0;
unsigned char tmp;
for(k=0;k<Len;k++)
{
i=(i+1)%256;
j=(j+s[i])%256;
tmp = s[i];
s[i] = s[j]; //交换s[x]和s[y]
s[j] = tmp;
t=(s[i]+s[j])%256;
Data[k] ^= s[t];
}
}
int main()
{
int j;
unsigned char s[256] = {0},s2[256] = {0}; //S-box
unsigned char key[256] ={0};
key[0] = 0x12;
key[1] = 0x34;
for(j=0;j<256;j++)
{
printf("[%d] %d\n",j,key[j]);
}
unsigned char pData[4] ={0};
//char pData[512] = "这是一个用来加密的数据Data";
pData[0] = 0x64;
pData[1] = 0x63;
pData[2] = 0xf3;
pData[3] = 0x3f;
ULONG len = strlen((char*)pData);
printf("pData = %s %d\n",pData,len);
printf("key = %s, length = %d\n\n",key,strlen((char *)key));
rc4_init(s,(unsigned char *)key,strlen((char *)key)); //已经完成了初始化
printf("完成对S[i]的初始化,如下:\n\n");
for (int i=0; i<256; i++)
{
printf("%x ",s[i]);
}
printf("\n\n");
for(i=0;i<256;i++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!
{
s2[i]=s[i];
}
printf("已经初始化,现在加密:\n\n");
rc4_crypt(s,(unsigned char *)pData,len);//加密
printf("pData = %s %d\n\n",pData,strlen((char*)pData));
printf("pData = %x %x %x %x\n\n",*pData,*(pData+1),*(pData+2),*(pData+3));
printf("已经加密,现在解密:\n\n");
rc4_init(s,(unsigned char *)key, strlen((char *)key)); //初始化密钥
rc4_crypt(s,(unsigned char *)pData,len);//解密
printf("pData = %s\n\n",pData);
return 0;
}
public void test()
{
byte[] s = new byte[256];
byte[] s2 = new byte[256]; //S-box
byte[] key = new byte[256];
key[0] = 0x12;
key[1] = 0x34;
for (int j = 0; j < 256; j++)
{
// WriteLineEven("[%d] %d\n" + j.ToString() + "" + key[j].ToString());
Console.WriteLine("[%d] %d\n", j.ToString(), key[j].ToString());
}
byte[] pData = new byte[4];
//char pData[512] = "这是一个用来加密的数据Data";
pData[0] = 0x64;
pData[1] = 0x63;
pData[2] = 0xf3;
pData[3] = 0x3f;
long len = pData.Length;
Console.WriteLine("pData = %s %d\n", pData, len);
Console.WriteLine("key = %s, length = %d\n\n", key, key.Length);
rc4_init(s, key, key.Length); //已经完成了初始化
Console.WriteLine("完成对S[i]的初始化,如下:\n\n");
for (int i = 0; i < 256; i++)
{
Console.WriteLine("%x ", s[i]);
}
Console.WriteLine("\n\n");
for (int r = 0; r < 256; r++)//用s2[i]暂时保留经过初始化的s[i],很重要的!!!
{
s2[r] = s[r];
}
Console.WriteLine("已经初始化,现在加密:\n\n");
rc4_crypt(s, pData, len);//加密
Console.WriteLine("------------------------pData = %s %d\n\n", pData, pData.Length);
Console.WriteLine("----------pData = %x %x %x %x\n\n", pData[0].ToString(), pData[1].ToString(), pData[2].ToString(), pData[3].ToString());
Console.WriteLine("已经加密,现在解密:\n\n");
rc4_init(s, key, key.Length); //初始化密钥
rc4_crypt(s, pData, len);//解密
Console.WriteLine("pData = %s\n\n", pData);
Console.ReadKey();
}
//初始化函数
void rc4_init(byte[] s, byte[] key, long Len)
{
int j = 0;
byte[] k = new byte[256];
byte tmp = new byte();
for (int i = 0; i < 256; i++)
{
k[i] = 0x0;
}
for (int q = 0; q < 256; q++)
{
s[q] = (byte)(q >> 8); //不能直接用int
k[q] = key[q % Len];
}
for (int w = 0; w < 256; w++)
{
j = (j + s[w] + k[w]) % 256;
tmp = s[w];
s[w] = s[j]; //交换s[i]和s[j]
s[j] = tmp;
}
}
//加解密
public static void rc4_crypt(byte[] s, byte[] Data, long Len)
{
int i = 0, j = 0, t = 0;
byte tmp;
for (int k = 0; k < Len; k++)
{
i = (i + 1) % 256;
j = (j + s[i]) % 256;
tmp = s[i];
s[i] = s[j]; //交换s[x]和s[y]
s[j] = tmp;
t = (s[i] + s[j]) % 256;
Data[k] ^= s[t];
}
}
2
3
4
5
byte[] pData = new byte[4];
*pData?
*(pData+1)?
*(pData+2)?
*(pData+3)?
相当于
byte[] pData = new byte[4];
pData [0]
pData [1]
pData [2]
pData [3]
byte[] pData = new byte[4];
*pData?
*(pData+1)?
*(pData+2)?
*(pData+3)?