Rc4 例子2

来源:互联网 发布:人才外包知乎 编辑:程序博客网 时间:2024/05/22 17:17
        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];        }    }}


0 0
原创粉丝点击