Algorithmus Optimierung

  • C#
  • .NET (FX) 1.0–2.0

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Algorithmus Optimierung

    Moin,
    Gibts ne möglichkeit diesen RC4-Algo etwas zu optimieren (code mäßig, nicht performance mäßig).
    Kann man diese drei loops iwie sinnvoll in einen umschreiben?

    C#-Quellcode

    1. private static byte[] _RC4EncryptDecrypt(byte[] bytes, byte[] Key)
    2. {
    3. byte[] s = new byte[256];
    4. byte[] k = new byte[256];
    5. byte temp;
    6. int i, j;
    7. for (i = 0; i < 256; i++)
    8. {
    9. s[i] = (byte)i;
    10. k[i] = Key[i % Key.GetLength(0)];
    11. }
    12. j = 0;
    13. for (i = 0; i < 256; i++)
    14. {
    15. j = (j + s[i] + k[i]) % 256;
    16. temp = s[i];
    17. s[i] = s[j];
    18. s[j] = temp;
    19. }
    20. i = j = 0;
    21. for (int x = 0; x < bytes.GetLength(0); x++)
    22. {
    23. i = (i + 1) % 256;
    24. j = (j + s[i]) % 256;
    25. temp = s[i];
    26. s[i] = s[j];
    27. s[j] = temp;
    28. int t = (s[i] + s[j]) % 256;
    29. bytes[x] ^= s[t];
    30. }
    31. return bytes;
    32. }
    C# Developer
    Learning C++

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Rikudo“ ()

    Rikudo schrieb:

    sinnvoll in einen umschreiben
    geht nicht, da in den unteren Schleifen auf die Ergebnisse / Änderungen der oberen zurückgegriffen wird.
    Diese 3 Zeilen kannst Du zu einem Swap() zusammenfassen:

    C#-Quellcode

    1. temp = s[i];
    2. s[i] = s[j];
    3. s[j] = temp;
    und bytes.GetLength(0) kannst Du ersetzen durch bytes.Length.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!