<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[RC4 Verschlüsselung]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe versucht das <a href="http://www.freevbcode.com/ShowCode.asp?ID=4398" rel="nofollow">RC4 Modul</a> aus VB6 zu portieren.. Soweit hab ich das auch geschafft, nur bekommme ich beim Ausführen des Programms einen Fehler:</p>
<pre><code>This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
</code></pre>
<p>Nach dem Fehler habe ich natürlich gegooglet, bin aber nicht wirklich aus den Beiträgen schlau geworden..<br />
Hier mal mein Code, vielleicht kann mir ja einer von euch sagen, was falsch ist.</p>
<pre><code class="language-cli">/*
Name:           RC4 Encryption by shikari*
Version:        0.01
Description:    Encrypting and decrypting strings with RC4.
*/
#include &lt;iostream&gt;
using namespace std;

#define Xor(X,Y) (!!(X) ^ !!(Y))

string RC4(string text, string password);

int main() {
    string sText, sPassword, sReturn;
    cout &lt;&lt; &quot;Text:&quot; &lt;&lt; endl;
    cin &gt;&gt; sText;
    cout &lt;&lt; &quot;Password:&quot; &lt;&lt; endl;
    cin &gt;&gt; sPassword;
    sReturn = RC4(sText, sPassword);
    cout &lt;&lt; sText.at(5) &lt;&lt; endl; // Debug
    cout &lt;&lt; sReturn;
    return 0;
}

string RC4(string text, string password) {
        int RB[255];
        long x, y, z;
        unsigned char key[255];
        unsigned char ByteArray[text.length()];
        unsigned char Temp;
        string RC4;
        cout &lt;&lt; &quot;1&quot; &lt;&lt; endl; // Debug
        if(text.length() == 0) {
            return NULL;
        }else if(password.length() == 0) {
            return NULL;
        }
                cout&lt;&lt; &quot;1&quot; &lt;&lt; endl; // Debug
        for(int i=0;i &lt; 255;i++) {
            key[i] = password.at(i);
        }
                cout&lt;&lt; &quot;1&quot; &lt;&lt; endl;
        for(int i=0;i &lt; 255;i++) {
            RB[i] = i;
        }
                cout &lt;&lt;&quot;1&quot; &lt;&lt; endl; // Debug
        x = 0;
        y = 0;
        z = 0;
        for(x=0; x &lt; 255; x++) {
            y = ((y + RB[x] + key[x % password.length()]) % 256);
            Temp = RB[x];
            RB[y] = RB[y];
            RB[y] = Temp;
        }
        x = 0;
        y = 0;
        z = 0;
                cout&lt;&lt; &quot;1&quot; &lt;&lt; endl; // Debug
        for(int i = 0; i&lt;text.length();i++) {
            ByteArray[i] = text.at(i);
        }
        for(x = 0; x &lt; text.length(); x++) {
            y = (y + 1) % 256;
            z = (z + RB[y]) % 256;
            Temp = RB[y];
            RB[y] = RB[z];
            RB[z] = Temp;
            ByteArray[x] = (Xor (ByteArray[x], (RB[RB[y] + RB[z&rsqb;&rsqb; % 256)));
        }
        for(int i=0; i &lt; text.length(); i++) {
            RC4 += ByteArray[i];
        }
                cout &lt;&lt;&quot;1&quot; &lt;&lt; endl; // Debug
        return RC4;
}
</code></pre>
<p>Vielen Dank,<br />
shikari<sup>*</sup></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/242228/rc4-verschlüsselung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 01:45:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/242228.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Jun 2009 11:59:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 11:59:46 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe versucht das <a href="http://www.freevbcode.com/ShowCode.asp?ID=4398" rel="nofollow">RC4 Modul</a> aus VB6 zu portieren.. Soweit hab ich das auch geschafft, nur bekommme ich beim Ausführen des Programms einen Fehler:</p>
<pre><code>This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
</code></pre>
<p>Nach dem Fehler habe ich natürlich gegooglet, bin aber nicht wirklich aus den Beiträgen schlau geworden..<br />
Hier mal mein Code, vielleicht kann mir ja einer von euch sagen, was falsch ist.</p>
<pre><code class="language-cli">/*
Name:           RC4 Encryption by shikari*
Version:        0.01
Description:    Encrypting and decrypting strings with RC4.
*/
#include &lt;iostream&gt;
using namespace std;

#define Xor(X,Y) (!!(X) ^ !!(Y))

string RC4(string text, string password);

int main() {
    string sText, sPassword, sReturn;
    cout &lt;&lt; &quot;Text:&quot; &lt;&lt; endl;
    cin &gt;&gt; sText;
    cout &lt;&lt; &quot;Password:&quot; &lt;&lt; endl;
    cin &gt;&gt; sPassword;
    sReturn = RC4(sText, sPassword);
    cout &lt;&lt; sText.at(5) &lt;&lt; endl; // Debug
    cout &lt;&lt; sReturn;
    return 0;
}

string RC4(string text, string password) {
        int RB[255];
        long x, y, z;
        unsigned char key[255];
        unsigned char ByteArray[text.length()];
        unsigned char Temp;
        string RC4;
        cout &lt;&lt; &quot;1&quot; &lt;&lt; endl; // Debug
        if(text.length() == 0) {
            return NULL;
        }else if(password.length() == 0) {
            return NULL;
        }
                cout&lt;&lt; &quot;1&quot; &lt;&lt; endl; // Debug
        for(int i=0;i &lt; 255;i++) {
            key[i] = password.at(i);
        }
                cout&lt;&lt; &quot;1&quot; &lt;&lt; endl;
        for(int i=0;i &lt; 255;i++) {
            RB[i] = i;
        }
                cout &lt;&lt;&quot;1&quot; &lt;&lt; endl; // Debug
        x = 0;
        y = 0;
        z = 0;
        for(x=0; x &lt; 255; x++) {
            y = ((y + RB[x] + key[x % password.length()]) % 256);
            Temp = RB[x];
            RB[y] = RB[y];
            RB[y] = Temp;
        }
        x = 0;
        y = 0;
        z = 0;
                cout&lt;&lt; &quot;1&quot; &lt;&lt; endl; // Debug
        for(int i = 0; i&lt;text.length();i++) {
            ByteArray[i] = text.at(i);
        }
        for(x = 0; x &lt; text.length(); x++) {
            y = (y + 1) % 256;
            z = (z + RB[y]) % 256;
            Temp = RB[y];
            RB[y] = RB[z];
            RB[z] = Temp;
            ByteArray[x] = (Xor (ByteArray[x], (RB[RB[y] + RB[z&rsqb;&rsqb; % 256)));
        }
        for(int i=0; i &lt; text.length(); i++) {
            RC4 += ByteArray[i];
        }
                cout &lt;&lt;&quot;1&quot; &lt;&lt; endl; // Debug
        return RC4;
}
</code></pre>
<p>Vielen Dank,<br />
shikari<sup>*</sup></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1718996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1718996</guid><dc:creator><![CDATA[shikari*]]></dc:creator><pubDate>Mon, 01 Jun 2009 11:59:46 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 12:23:55 GMT]]></title><description><![CDATA[<p>Der Debugger würde dir vermutlich sofort anzeigen wo es hakt.</p>
<p>CLI ist <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-58.html" rel="nofollow">nebenan</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719012</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Mon, 01 Jun 2009 12:23:55 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 12:48:57 GMT]]></title><description><![CDATA[<p>Registrierter Troll schrieb:</p>
<blockquote>
<p>Der Debugger würde dir vermutlich sofort anzeigen wo es hakt.</p>
<p>CLI ist <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-58.html" rel="nofollow">nebenan</a>.</p>
</blockquote>
<p>Der Debugger also?<br />
Ich benutze Code::Blocks, und beim Ausführen meldet sich kein Debugger.<br />
Welche IDE sollte ich denn nun nehmen?<br />
Edit: Hab den Debugger gefunden, meldet mir das hier:</p>
<pre><code>C:\C++\RC4\main.cpp||In function `std::string RC4(std::string, std::string)':|
C:\C++\RC4\main.cpp|61|warning: comparison between signed and unsigned integer expressions|
C:\C++\RC4\main.cpp|64|warning: comparison between signed and unsigned integer expressions|
C:\C++\RC4\main.cpp|72|warning: comparison between signed and unsigned integer expressions|
||=== Build finished: 0 errors, 3 warnings ===|
</code></pre>
<p>Mh. Sonst noch jemand ne Idee?<br />
Mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719029</guid><dc:creator><![CDATA[shikari*]]></dc:creator><pubDate>Mon, 01 Jun 2009 12:48:57 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 13:04:19 GMT]]></title><description><![CDATA[<p>Registrierter Troll bezog sich auf deine Code Tags, die sind für C++/CLI.</p>
<p>Ansonsten, das ist nicht der Debugger, das ist die Ausgabe vom Compiler vermutlich gcc bzw. MinGW. Der Debugger ist bei Code::Blocks über die Menüzeile / Debug erreichbar.</p>
<p>Im Code::Blocks Wiki steht was dazu:<br />
<a href="http://wiki.codeblocks.org/index.php?title=Debugging_with_Code::Blocks" rel="nofollow">http://wiki.codeblocks.org/index.php?title=Debugging_with_Code::Blocks</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719042</guid><dc:creator><![CDATA[blub* 0]]></dc:creator><pubDate>Mon, 01 Jun 2009 13:04:19 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 16:45:18 GMT]]></title><description><![CDATA[<p>Danke für die Hilfe - habs jetzt geschafft, den Fehler zu finden.<br />
Nach dem Quelltext oben, hätte ich wohl ein 255 chars langes Passwort übergeben müssen.<br />
Hab nun</p>
<pre><code class="language-cpp">unsigned char key[255];
</code></pre>
<p>in</p>
<pre><code class="language-cpp">unsigned char key[password.length()];
</code></pre>
<p>umgeändert.</p>
<p>Leider funktioniert die Verschlüsselung nicht, aber was solls. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719183</guid><dc:creator><![CDATA[shikari*]]></dc:creator><pubDate>Mon, 01 Jun 2009 16:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 16:54:02 GMT]]></title><description><![CDATA[<p>Das kompiliert so aber nicht.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Bei einem Array musst du einen konstanten Wert angeben. Ansonsten musst du einen dynamischen Container nehmen.. (oder selbst was mit new werkeln).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719185</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 01 Jun 2009 16:54:02 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 17:10:29 GMT]]></title><description><![CDATA[<p>blub² schrieb:</p>
<blockquote>
<p>Registrierter Troll bezog sich auf deine Code Tags, die sind für C++/CLI.</p>
</blockquote>
<p>...und der Code ist auch kein C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719194</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 17:12:33 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Das kompiliert so aber nicht.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Bei einem Array musst du einen konstanten Wert angeben. Ansonsten musst du einen dynamischen Container nehmen.. (oder selbst was mit new werkeln).</p>
</blockquote>
<pre><code>||=== RC4, Release ===|
C:\C++\RC4\main.cpp||In function `std::string RC4(std::string, std::string)':|
C:\C++\RC4\main.cpp|44|warning: comparison between signed and unsigned integer expressions|
C:\C++\RC4\main.cpp|65|warning: comparison between signed and unsigned integer expressions|
C:\C++\RC4\main.cpp|68|warning: comparison between signed and unsigned integer expressions|
C:\C++\RC4\main.cpp|76|warning: comparison between signed and unsigned integer expressions|
||=== Build finished: 0 errors, 4 warnings ===|
</code></pre>
<p>bei mir schon... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
MfG<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3820">@Troll</a>: Du machst deinem Namen alle Ehre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719195</guid><dc:creator><![CDATA[shikari*]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 17:25:36 GMT]]></title><description><![CDATA[<p>shikari* schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3820">@Troll</a>: Du machst deinem Namen alle Ehre.</p>
</blockquote>
<p>Wenigstens kann ich programmieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Edit: Ernsthaft, dein Code ist kein C++. Wo kommt z. B. <code>string</code> her? Seit wann gibt es in C++ Arrays mit nichtkonstanter Größe? Seit wann kann ein Objekt NULL sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719198</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:25:36 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 17:29:39 GMT]]></title><description><![CDATA[<p>Registrierter Troll schrieb:</p>
<blockquote>
<p>shikari* schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/3820">@Troll</a>: Du machst deinem Namen alle Ehre.</p>
</blockquote>
<p>Wenigstens kann ich programmieren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<pre><code class="language-cpp">int niveau;
niveau = INT_MIN;
</code></pre>
<p>edit:</p>
<p>Registrierter Troll schrieb:</p>
<blockquote>
<p>Edit: Ernsthaft, dein Code ist kein C++. Wo kommt z. B. <code>string</code> her? Seit wann gibt es in C++ Arrays mit nichtkonstanter Größe? Seit wann kann ein Objekt NULL sein?</p>
</blockquote>
<p>Solange es zu keinen Fehlern kommt?<br />
Ja, ich gebe zu, ich bin Anfänger - und?<br />
Mehr auch nicht. Dann ist es halt kein C++. Anstatt irgendwelche dummen Kommentare abzugeben, hättest du mir auch helfen können, es anders zu lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719202</guid><dc:creator><![CDATA[shikari*]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:29:39 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 17:28:53 GMT]]></title><description><![CDATA[<p>shikari* schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int niveau;
niveau = INT_MIN;
</code></pre>
</blockquote>
<p>Nein nein, in C++ heißt das</p>
<pre><code class="language-cpp">int niveau = std::numeric_limits&lt;int&gt;::min();
</code></pre>
<p>HTH.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719205</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:28:53 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 17:32:35 GMT]]></title><description><![CDATA[<p>Registrierter Troll schrieb:</p>
<blockquote>
<p>shikari* schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int niveau;
niveau = INT_MIN;
</code></pre>
</blockquote>
<p>Nein nein, in C++ heißt das</p>
<pre><code class="language-cpp">int niveau = std::numeric_limits&lt;int&gt;::min();
</code></pre>
<p>HTH.</p>
</blockquote>
<p>Das ist das gleiche..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719210</guid><dc:creator><![CDATA[shikari*]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 17:32:40 GMT]]></title><description><![CDATA[<p>shikari* schrieb:</p>
<blockquote>
<p>solange es funktioniert?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<blockquote>
<p>Anstatt irgendwelche dummen Kommentare abzugeben, hättest du mir auch helfen können, es anders zu lösen.</p>
</blockquote>
<p>Also entschuldige mal - du stellst hier komischen Code rein, der kein C++ ist und zeichnest ihn als &quot;C++/CLI&quot; aus. Ich habe keine Ahnung, wie C++/CLI aussieht und bin mal davon ausgegangen, dass du dich einfach nur im Forum geirrt hast.<br />
Mich dann für deine eigenen Fehler zu beschimpfen ist nicht gerade niveauvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719211</guid><dc:creator><![CDATA[Registrierter Troll]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 17:33:12 GMT]]></title><description><![CDATA[<p>@Registrierter Troll,<br />
Es ist schon C++, nur äusserst hässliches. <code>NULL</code> für <code>int</code> , statt für zeiger und 0 für <code>int</code> , dann <code>std::string</code> verwenden, obwohl kein Header <code>&lt;string&gt;</code> inkludiert ist, <code>NULL</code> Rückgabe, wodurch daraus ein Nullzeiger auf <code>char const</code> erstellt wird und dann undefiniertes Verhalten auslöst und die Liste kann man wohl noch weiterführen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Hmmm, mal schauen, wenn ich heute noch Zeit finde, mache ich mal eine Mängelliste <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719212</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:33:12 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 17:38:13 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a>: Ich wär dir sehr verbunden - danke.<br />
Ich bin eigt. Delphi und VB6 Programmierer, vielleicht kommt mein häßlicher Programmierstil daher.<br />
MfG.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719215</guid><dc:creator><![CDATA[shikari*]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:38:13 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Mon, 01 Jun 2009 17:48:51 GMT]]></title><description><![CDATA[<p>Was für einen Compiler verwendest du denn?<br />
Weil ein Array kannst du normal wie Dravere sagte nur mit einem konstanten Wert initialisieren, ansonsten musst du entweder einen Container a lá std::vector nehmen oder den Speicher zur Laufzeit mit new allokieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719224</guid><dc:creator><![CDATA[blub* 0]]></dc:creator><pubDate>Mon, 01 Jun 2009 17:48:51 GMT</pubDate></item><item><title><![CDATA[Reply to RC4 Verschlüsselung on Tue, 02 Jun 2009 08:40:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4286">@blub</a>²,<br />
Du meinst wohl eher drakon, er hat dies gesagt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21647">@shikari</a>*,<br />
Also hier mal ein paar Kommentare. Ich hoffe, dass ich das meiste erwischt habe. Den Algorithmus an sich habe ich nicht korrigiert, habe nur Tipps im Code gegeben für eine bessere Struktur.</p>
<pre><code class="language-cpp">#include &lt;string&gt;   // fehlt, für std::string
#include &lt;iostream&gt; 
#include &lt;algorithm&gt; // braucht man, falls man ein paar Dinge schöner machen möchte.
                     // Dazu später...

using namespace std; // Pass damit auf. Man sollte
// using namespace nur mit äusserster Vorsicht einsetzen.
// Du heblst hier die Funktion des Namensraumes aus. Wenn du
// sowas nur machst, weil du zu faul bist std:: zu schreiben,
// dann ist hier wirklich was verkehrt.

// Herrje. Wieso ein Makro, wenn es auch eine Funktion tun würde?
#define Xor(X,Y) (!!(X) ^ !!(Y)) 

// Makros sind sehr böse, da hinter dem Makro nur ein dummer
// Textersetzungsmechanismus steckt. Makrocode kümmert sich einen
// Scheiss um C++ Quellcode. Dadurch können sehr seltsame Fehler
// entstehen. Makros werden vor allem in C als Ersatz für die Templates
// in C++ benutzt. Oder vielleicht so formuliert, damit kein C'ler wütend wird:
// Viele Makros, welche in C eingesetzt werden, können in C++ durch
// Templates ersetzt werden.

string RC4(string text, string password); 

int main() { 

    // Geben wir dem Code doch etwas Platz ;)

    // string sText, sPassword, sReturn; 
    // Man muss nicht immer alle Variablen ganz oben deklarieren.
    // Das galt nur bei den alten C Standards, in C++ war es nie der Fall.

    // Wegen der Übersichtlichkeit deklariert man die Variablen
    // heutzutage dort, wo man sie auch gleich als erstes braucht.

    cout &lt;&lt; &quot;Text:&quot; &lt;&lt; endl; 

    string sText;
    cin &gt;&gt; sText; 

    // Was passiert bei falscher Eingabe?
    // Zum Beispiel statt eines Wortes, mehrere.

    cout &lt;&lt; &quot;Password:&quot; &lt;&lt; endl; 

    string sPassowrd;
    cin &gt;&gt; sPassword; 

    // Was passiert bei falscher Eingabe?

    string sReturn = RC4(sText, sPassword); 

    cout &lt;&lt; sText.at(5) &lt;&lt; endl; // Debug und je nach dem löst es eine Exception aus.
    cout &lt;&lt; sReturn; 

    return 0; 
}
</code></pre>
<pre><code class="language-cpp">string RC4(string const&amp; text, string const&amp; password) { 

    // Die Referenz auf ein konstantes Objekt vermeidet unnötige
    // Kopien. Vor allem bei komplexen und grosse Objekten,
    // sollte man statt einer Kopie eine Referenz auf ein konstantes
    // Objekt übergeben. Ausser man benötigt wirklich eine Kopie ;)

    // Bei fundamentalen Datentypen, bzw. kleinen Datentypen,
    // sollte man dagegen immer eine Kopie nehmen, da die Kopie
    // dann besser ist, bzw. die Referenz mehr Nachteile hat.

    int RB[255];  // Der Name sagt nichts.
    long x, y, z; // Die Namen sagen nichts.

    unsigned char key[255]; 
    //unsigned char ByteArray[text.length()]; // Kein C++ Standard. Unter GCC geht es wahrscheinlich,
                                              // da GCC eine entsprechende Erweiterung unterstütz,
                                              // kommend aus C99. Aber wie gesagt, ist nicht Standard
                                              // kompatibel.

    // In C++ solltest du wohl sowas machen:
    std::vector&lt;unsigned char&gt; ByteArray(text.length());

    // Dafür brauchst du aber den Header &lt;vector&gt;

    // unsigned char Temp; &lt;- wird gar nicht mehr benötigt.
    string RC4; 

    // Wieder gilt, dass man nicht alle Variablen ganz oben deklarieren muss.
    // Ich bin jetzt aber zu faul, diese auch runterzuschieben. Du sollst ja eigentlich
    // den Code umschreiben und verbessern, nicht ich :)

        cout &lt;&lt; &quot;1&quot; &lt;&lt; endl; // Debug 

    if(text.length() == 0) { 
        return NULL; 
        // NULL ist ein Makro, welches durch 0 ersetzt wird.
        // Dadurch wird ein std::string(0) erstellt.
        // Was eigentlich ein std::string((char const*)0); ist.
        // Was schlussendlich undefiniert ist.
        // Korrekt wäre hier:
        // return &quot;&quot;;
        // oder
        // return std::string();
        // oder
        // return RC4;
        // RC4 ist hier ja ein leerer std::string.
    }
    else if(password.length() == 0) { 
        return NULL; 
        // Siehe oben.
    } 

            cout&lt;&lt; &quot;1&quot; &lt;&lt; endl; // Debug 

    for(int i = 0; i &lt; 255; i++) { 
        key[i] = password.at(i); // Was passiert wenn password wenig als 255 Zeichen hat?
    }                            // Eine Exception kommt geflogen ... la la la la la laaaaa

    // Und was ist, wenn password mehr Zeichen hat? Also irgendwas stimmt in diesem Algo nicht ;)

    // Auch könnte man diese for-Schleife mit einem std::copy verkürzen und lesbarer machen.
    // Ein Beispiel wie man std::copy aus dem Header &lt;algorithm&gt; verwendet, kommt später.

            cout&lt;&lt; &quot;1&quot; &lt;&lt; endl; 

    for(int i = 0; i &lt; 255; i++) { 
        RB[i] = i; 
    } 

            cout &lt;&lt;&quot;1&quot; &lt;&lt; endl; // Debug 

    x = 0; 
    y = 0; 
    z = 0; 

    for(/*x = 0*/; x &lt; 255; x++) {  // schon wieder x = 0? Ist doch schon 0!
        // Oje, sehr übersichtlicher Code folgt. Vor allem kombiniert mit den
        // unleserlichen Variablennamen.
        // Hier wäre es wohl sinnvoll Dinge in Funktionen auszulagern.
        // Oder zumindest mit Zwischenresultaten zu arbeiten.
        y = ((y + RB[x] + key[x % password.length()]) % 256);

        // Auch für das nächste wäre eine Funktion was nettes. Es gibt
        // sogar bereits eine in der Standardbibliothek. Dafür muss
        // aber der Header &lt;algorithm&gt; eingebunden werden.
        /*
        Temp = RB[x]; 
        RB[y] = RB[y]; 
        RB[y] = Temp; 
        */
        std::swap(RB[y], RB[x]);

        // Ist deutlich deutlich lesbarer so eine Funktion, nicht?
    } 

    x = 0; 
    y = 0; 
    z = 0; 

            cout&lt;&lt; &quot;1&quot; &lt;&lt; endl; // Debug 

    // Das folgende kann man auch vereinfachen:
    /*for(int i = 0; i &lt; text.length(); i++) { 
        ByteArray[i] = text.at(i); 
    } */
    std::copy(text.begin(), text.end(), ByteArray.begin());

    // Dafür ist der Header &lt;algorithm&gt; nötig.

    for(/*x = 0*/; x &lt; text.length(); x++) { // Wieder setzt du x = 0, obwohl x schon 0 ist :)
        // Wieder sehr übersichtlicher Code. Immerhin mit ein paar Zwischenergebnissen.
        // Aber durch die schlechten Namen...
        y = (y + 1) % 256; 
        z = (z + RB[y]) % 256; 

        // Kann man wieder kürzen dank swap aus &lt;algorithm&gt;
        /*
        Temp = RB[y]; 
        RB[y] = RB[z]; 
        RB[z] = Temp; 
        */
        std::swap(RB[y], RB[x]);

        // Tjo und das ist auch nicht gerade übersichtlich und
        // der Übersichtlichkeit hilft das Makro nicht. Auch stimmt
        // der Name nicht so wirklich. Es ist kein reines XOR.
        ByteArray[x] = (Xor (ByteArray[x], (RB[RB[y] + RB[z&rsqb;&rsqb; % 256))); 
    } 

    /*
    for(int i = 0; i &lt; text.length(); i++) { 
        RC4 += ByteArray[i]; 
    } 
    */
    // Kann man wieder kürzen:
    std::copy(ByteArray.begin(), ByteArray.end(), RC4.begin());

    // Wieso arbeitest du allerdings nicht direkt auf dem RC4 Objekt?
    // Könntest am Anfang statt:
    // std::vector&lt;unsigned char&gt; ByteArray(text.length());
    // std::string RC4;
    // Sowas machen:
    // std::string RC4 = text;
    // So würde auch die erste Kopie von text nach ByteArray wegfallen.

            cout &lt;&lt;&quot;1&quot; &lt;&lt; endl; // Debug 

    return RC4; 
}
</code></pre>
<p>Wenn man die Korrekturen angewendet hat, könnte man wahrscheinlich nochmals drüber gehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ein paar allgemeine Sachen:<br />
- Verwende die Standardbibliothek. Gerade für Container und Algorithmen ist sie extrem praktisch. Eine fast vollständige Referenz findest du hier:<br />
<a href="http://www.cplusplus.com/reference/" rel="nofollow">http://www.cplusplus.com/reference/</a><br />
- Verzichte auf Makros. Daher verwende lieber auch kein INT_MIN, sondern nehme das std::numeric_limits&lt;int&gt;::min(). Vielleicht ein wenig übertrieben, aber gerade als Anfänger, sollte man sich manchmal ganz klare Grenzen machen. Später kann man diese immer noch lockern, verschärfen ist aber immer problematisch.<br />
- Probier nicht so lange aus, bis etwas kompiliert. Sondern informier dich darüber und wende die Sache so an, wie man sie anwenden muss. Der Kompiler kompiliert noch viel, was nicht korrekt ist. In C und C++ gibt es das &quot;undefinierte Verhalten&quot; (auch UB abgekürzt für Undefined Behavior). Es ist eine korrekte Syntax, der Kompiler lässt es somit durch, aber das Resultat ist undefiniert. Daher sollte man sich nicht zu sehr darauf verlassen, dass etwas korrekt ist, nur weil der Kompiler es aktzeptiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Grüssli</p>
<p>PS: LoL, der Beitrag wurde so lang, dass es zu Problemen mit dem Forum kam <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1719456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1719456</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 02 Jun 2009 08:40:02 GMT</pubDate></item></channel></rss>