byte[] s1 = new byte[256];
byte[] key = Encoding.Default.GetBytes("just for test");
byte[] pData = Encoding.Default.GetBytes("这是一个用来加密的数据Data");
byte[] pData1 = Encoding.Default.GetBytes("这是一个用来加密的数据Data1111");
byte[] pData2 = Encoding.Default.GetBytes("这是一个用来加密的数据Data2222");
Debug.Log(string.Format("数据: pData = {0}", GetBytesStr(pData)));
Debug.Log(string.Format("key = {0}, length = {1}", GetBytesStr(key), key.Length));
Rc4.Init(s1, key, key.Length); //已经完成了初始化
Debug.Log(string.Format("s1 : {0} ", GetBytesStr(s1)));
Rc4.Crypt(s1, pData, pData.Length);
Rc4.Crypt(s1, pData1, pData1.Length);
Rc4.Crypt(s1, pData2, pData2.Length);
Debug.Log(string.Format("加密1: pData = {0}", GetBytesStr(pData)));
Debug.Log(string.Format("加密2: pData1 = {0}", GetBytesStr(pData1)));
Debug.Log(string.Format("加密3: pData2 = {0}", GetBytesStr(pData2)));
byte[] s2 = new byte[256];
Rc4.Init(s2, key, key.Length);
Debug.Log(string.Format("s2 : {0} ", GetBytesStr(s2)));
Rc4.Crypt(s2, pData, pData.Length);
Rc4.Crypt(s2, pData1, pData1.Length);
Rc4.Crypt(s2, pData2, pData2.Length);
Debug.Log(string.Format("解密1: pData = {0}", GetBytesStr(pData)));
Debug.Log(string.Format("解密2: pData1 = {0}", GetBytesStr(pData1)));
Debug.Log(string.Format("解密3: pData2 = {0}", GetBytesStr(pData2)));
<pre class="csharp" name="code">public class Rc4 {
public static void Init(byte[] s, byte[] key, int len)
{
int i = 0, j = 0;
byte[] k = new byte[256];
byte tmp = 0;
for (i = 0; i < 256; i++)
{
s[i] = (byte)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[j] = tmp;
}
}
public static void Crypt(byte[] s, byte[] data, int len)
{
int i = 0, j = 0, t = 0;
uint k = 0;
byte 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];
}
}
}