<?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[Blowfish - Verschlüsselung]]></title><description><![CDATA[<p>Hallo alle!</p>
<p>Ich habe gestern nach viel hin und her OpenSSL-0.9.6c endlich kompiliert <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>Ich habe dann mit Hilfe von Kollege und der Dokumentation eine Funktion geschrieben, die jedes mal einen Blowfish-Schlüssel erzeugt und einen String damit verschlüsselt:</p>
<pre><code class="language-cpp">AnsiString BlowfishString(AnsiString data, AnsiString pwd, bool encode)
/*
  Data wird mit Blowfish verschlüsselt

  pwd sind die Grunddaten für den Schlüssel
*/
{
   //pwd wird in einen null-terminierten String umgewandelt
   unsigned char* ch = pwd.c_str();
   //Länge des Strings
   int l = strlen(ch);
   //Deklaration des Schlüssels
   BF_KEY key;
   //Der Schlüssel key wird generiert
   BF_set_key(&amp;key, l, ch);

   /* Wird von OpenSSL verlangt
      &quot;ivec must point at an 8 byte long initialization vector&quot;
      es genügt, wenn man ivec nur deklariert
   */
   unsigned char ivec;
   /* Wird von OpenSSL verlangt
      &quot;num must point at an integer which must be initially zero&quot;
      zeigt auf das byte, das verschlüsselt wird/wurde
   */
   int num = 0;

   AnsiString password = data;

   //Verschlüsselung mit Blowfish
   //bei encode == true wird verschlüsselt
   if (encode)
      BF_cfb64_encrypt(password.c_str(), password.c_str(),
                      strlen(password.c_str()), &amp;key, &amp;ivec, &amp;num, BF_ENCRYPT);
   //sonst entschlüsselt
   else
      BF_cfb64_encrypt(password.c_str(), password.c_str(),
                      strlen(password.c_str()), &amp;key, &amp;ivec, &amp;num, BF_DECRYPT);

   data = password;

   return data;
}
</code></pre>
<p>Eigentlich klappt das ganze sehr gut... Mit einem TForm Fenster</p>
<p>Ich habe eine Anwendung mit vier TForms. In der ersten wird ein Passwort mit Blowfish verschlüsselt und in einer Datenbank gespeichert.<br />
Im nächsten Fenster, wird nun das verschlüsselte Passwort aus der Datenbank geladen und mit dem gleichen Schlüssel entschlüsselt.<br />
Aber die Entschlüsselung klappt nicht, das Passwort aus der DB wird nicht zurück verschlüsselt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Kann mir jemand bitte helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/121230/blowfish-verschlüsselung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Jul 2026 00:59:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/121230.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Sep 2005 11:34:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Blowfish - Verschlüsselung on Wed, 21 Sep 2005 11:34:28 GMT]]></title><description><![CDATA[<p>Hallo alle!</p>
<p>Ich habe gestern nach viel hin und her OpenSSL-0.9.6c endlich kompiliert <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>Ich habe dann mit Hilfe von Kollege und der Dokumentation eine Funktion geschrieben, die jedes mal einen Blowfish-Schlüssel erzeugt und einen String damit verschlüsselt:</p>
<pre><code class="language-cpp">AnsiString BlowfishString(AnsiString data, AnsiString pwd, bool encode)
/*
  Data wird mit Blowfish verschlüsselt

  pwd sind die Grunddaten für den Schlüssel
*/
{
   //pwd wird in einen null-terminierten String umgewandelt
   unsigned char* ch = pwd.c_str();
   //Länge des Strings
   int l = strlen(ch);
   //Deklaration des Schlüssels
   BF_KEY key;
   //Der Schlüssel key wird generiert
   BF_set_key(&amp;key, l, ch);

   /* Wird von OpenSSL verlangt
      &quot;ivec must point at an 8 byte long initialization vector&quot;
      es genügt, wenn man ivec nur deklariert
   */
   unsigned char ivec;
   /* Wird von OpenSSL verlangt
      &quot;num must point at an integer which must be initially zero&quot;
      zeigt auf das byte, das verschlüsselt wird/wurde
   */
   int num = 0;

   AnsiString password = data;

   //Verschlüsselung mit Blowfish
   //bei encode == true wird verschlüsselt
   if (encode)
      BF_cfb64_encrypt(password.c_str(), password.c_str(),
                      strlen(password.c_str()), &amp;key, &amp;ivec, &amp;num, BF_ENCRYPT);
   //sonst entschlüsselt
   else
      BF_cfb64_encrypt(password.c_str(), password.c_str(),
                      strlen(password.c_str()), &amp;key, &amp;ivec, &amp;num, BF_DECRYPT);

   data = password;

   return data;
}
</code></pre>
<p>Eigentlich klappt das ganze sehr gut... Mit einem TForm Fenster</p>
<p>Ich habe eine Anwendung mit vier TForms. In der ersten wird ein Passwort mit Blowfish verschlüsselt und in einer Datenbank gespeichert.<br />
Im nächsten Fenster, wird nun das verschlüsselte Passwort aus der Datenbank geladen und mit dem gleichen Schlüssel entschlüsselt.<br />
Aber die Entschlüsselung klappt nicht, das Passwort aus der DB wird nicht zurück verschlüsselt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Kann mir jemand bitte helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/877014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877014</guid><dc:creator><![CDATA[wieczo]]></dc:creator><pubDate>Wed, 21 Sep 2005 11:34:28 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish - Verschlüsselung on Wed, 21 Sep 2005 22:45:45 GMT]]></title><description><![CDATA[<p>Dein <em>unsigned char</em> ch* ist quasi eine Zufallszahl.<br />
Siehe <a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39305" rel="nofollow">FAQ</a> unter &quot;AnsiString&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/877470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877470</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Wed, 21 Sep 2005 22:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish - Verschlüsselung on Thu, 22 Sep 2005 09:35:16 GMT]]></title><description><![CDATA[<p>Danke, Jansen <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>Ich habe den Code geändert:</p>
<pre><code class="language-cpp">AnsiString BlowfishString(AnsiString data, AnsiString dataKey, bool encode)
/*
  Data wird mit Blowfish verschlüsselt

  pwd sind die Grunddaten für den Schlüssel
*/
{
   //dataKey wird in einen null-terminierten String umgewandelt
   unsigned char* ch = new char[dataKey.Length()+1];
   //ch muss erstellt werden, da es sonst zu unterschiedlich Verschlüsselungen
   //in verschiedenen TForms kommt
   strcpy(ch, dataKey.c_str());
   //Länge des Strings
   int l = (int) strlen(ch);
   //Deklaration des Schlüssels
   BF_KEY key;
   //Der Schlüssel key wird generiert
   BF_set_key(&amp;key, l, ch);

   /* Wird von OpenSSL verlangt
      &quot;ivec must point at an 8 byte long initialization vector&quot;
      es genügt, wenn man ivec nur deklariert
   */
   unsigned char ivec;
   /* Wird von OpenSSL verlangt
      &quot;num must point at an integer which must be initially zero&quot;
      zeigt auf das byte, das verschlüsselt wird/wurde
   */
   int num = 0;

   unsigned char* in = new char[data.Length()+1];
   strcpy(in, data.c_str());
   long length = (long) strlen(data.c_str());
   BF_KEY *schedule = &amp;key;
   //Verschlüsselung mit Blowfish
   //bei encode == true wird verschlüsselt

   if (encode)
      BF_cfb64_encrypt(in, in, length, schedule, &amp;ivec, &amp;num, BF_ENCRYPT);
   //sonst entschlüsselt
   else
      BF_cfb64_encrypt(in, in, length, schedule, &amp;ivec, &amp;num, BF_DECRYPT);

   AnsiString s = StrPas(in);

   delete [] in;
   delete [] ch;

   return s;
}
</code></pre>
<p>Ich definiere in der Headerdatei noch</p>
<pre><code class="language-cpp">const AnsiString KEY = &quot;1234567890123456&quot;;
</code></pre>
<p>Und dann rufe ich die Funktion auf:</p>
<pre><code class="language-cpp">AnsiString s = BlowfishString(s, KEY, true);
</code></pre>
<p>Wenn ich s verschlüsseln will.</p>
<p>Ich kriege aber trotzdem noch unterschiedlich Werte für es jedesmal. Also habe ich den Debugger benutzt. Der sagt mir, dass die Speicheradresse von ch im Aufruf von &quot;BF_cfb64_encrypt(in, in, length, schedule, &amp;ivec, &amp;num, BF_ENCRYPT);&quot; ändert.</p>
<p>Ich weiß wirklich nicht, wo mein Fehler ist. Hat jemand noch eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/877653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/877653</guid><dc:creator><![CDATA[wieczo]]></dc:creator><pubDate>Thu, 22 Sep 2005 09:35:16 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish - Verschlüsselung on Fri, 23 Sep 2005 06:38:15 GMT]]></title><description><![CDATA[<p>Möglich, dass die Funktion BF_cfb64_encrypt() fehlerhaft ist, oder hast Du auch mal die Übergabeparameter gecheckt, so, dass alles richtig in der Funktion gesetzt ist?</p>
<p>Generell ist zu sagen, dass man das Passwort eher nicht mit einem Crypt-Algo verschlüsseln sollte. Eleganterweise nimmt man dazu einen Hash-Algorithmus, wie z.B. MD5 oder SHA. Dieser erzeugt von einer bel. Zeichenfolge eine eindeutige Hash-Summe, die man dann in der DB speichert und bei Bedarf mit der neuen Hash-Summe im Anmeldefenster vergleicht.</p>
<p>Schau mal auf meiner Seite unter BCB-&gt;Verschlüsselung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878264</guid><dc:creator><![CDATA[F98]]></dc:creator><pubDate>Fri, 23 Sep 2005 06:38:15 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish - Verschlüsselung on Fri, 23 Sep 2005 12:00:05 GMT]]></title><description><![CDATA[<p>Danke, F98.</p>
<p>Ich habe das Problem gelöst indem ich die DCPcrypt Komponente benutze statt OpenSSL. MD5 habe ich bereits eingebaut, aber ich brauche einen guten Verschlüsselungalgorithmus um andere Daten als das Passwort in einer Datenbank zu soeichern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878532</guid><dc:creator><![CDATA[wieczo]]></dc:creator><pubDate>Fri, 23 Sep 2005 12:00:05 GMT</pubDate></item></channel></rss>