2010-10-01 119 views
7

我需要執行128位RC4加密,我使用.NET和C#。有沒有一個內置的功能來做到這一點。RC4 128位加密在C#

如果不是這樣,我發現這個功能,可以做到這一點:

public void RC4(ref Byte[] bytes, Byte[] key) 
{ 
    Byte[] s = new Byte[256]; 
    Byte[] k = new Byte[256]; 
    Byte temp; 
    int i, j; 

    for (i = 0; i < 256; i++) 
    { 
     s[i] = (Byte)i; 
     k[i] = key[i % key.GetLength(0)]; 
    } 

    j = 0; 
    for (i = 0; i < 256; i++) 
    { 
     j = (j + s[i] + k[i]) % 256; 
     temp = s[i]; 
     s[i] = s[j]; 
     s[j] = temp; 
    } 

    i = j = 0; 
    for (int x = 0; x < bytes.GetLength(0); x++) 
    { 
     i = (i + 1) % 256; 
     j = (j + s[i]) % 256; 
     temp = s[i]; 
     s[i] = s[j]; 
     s[j] = temp; 
     int t = (s[i] + s[j]) % 256; 
     bytes[x] ^= s[t]; 
    } 
} 

但我不知道這是否是128位與否,它看起來256,但我真的不知道其中的差別。

+0

你必須使用RC4算法? – Kamyar 2010-10-01 19:31:19

+0

@Kamyar - 是的,它必須是RC4 128位加密。 – Steven 2010-10-01 19:43:27

回答

0

我可以告訴你,.Net框架中沒有RC4算法。有一個RC2加密...但沒有RC4。

+0

http://en.wikipedia.org/wiki/RC4 – Kamyar 2010-10-01 19:35:07

2

密鑰設置是該算法的第一個也是最困難的階段。在N位密鑰設置(N是密鑰長度)期間,加密密鑰用於使用兩個數組,狀態和密鑰以及N個混合操作生成加密變量。這些混合操作由交換字節,模操作和其他公式組成。

在附加的項目中,您可以看到我如何在RC4Engine類的EncryptionKey集屬性中執行此操作。

這是這個主題的有趣的文章 - http://www.codeproject.com/Articles/5068/RC4-Encryption-Algorithm-C-Version