<?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 Algo - wie genutzt?]]></title><description><![CDATA[<p>Guten Tag,<br />
um deutlich zu machen was ich überhaupt will, halte ich mal alles erstmal schlicht.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int main() {
    char text[256] = &quot;&quot;;
    char dec_text[256] = &quot;&quot;;
    char pw[12]   = &quot;&quot;;
    cout &lt;&lt; &quot;Text:&quot; &lt;&lt; endl;
    cin &gt;&gt; text;
    cout &lt;&lt; &quot;Password:&quot; &lt;&lt; endl;
    cin &gt;&gt; pw;
    // Per Blowfisch soll das nun verschlüsselt werden
    dec_text = blowfisch(text, pw);  // :) ?
    cout &lt;&lt; &quot;Verschluesselter Text:&quot; &lt;&lt; dec_text &lt;&lt; endl; 
    return 0;
}
</code></pre>
<p>So stelle ich es mir vor.</p>
<p>Es gibt da auch schon C codestücke zu:<br />
(SOrry, ist einbisschen viel, aber ich blicke da garnicht durch - außerdem haben dann auch interessierte eine grundlage)<br />
blow.cpp:</p>
<pre><code class="language-cpp">#ifdef little_endian   /* Eg: Intel */
   #include &lt;dos.h&gt;
   #include &lt;graphics.h&gt;
   #include &lt;io.h&gt;
#endif

#include &lt;math.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;

#ifdef little_endian   /* Eg: Intel */
   #include &lt;alloc.h&gt;
#endif

#include &lt;ctype.h&gt;

#ifdef little_endian   /* Eg: Intel */
   #include &lt;dir.h&gt;
   #include &lt;bios.h&gt;
#endif

#ifdef big_endian
   #include &lt;Types.h&gt;
#endif

#include &quot;Blowfish.h&quot;

#define N               16
#define noErr            0
#define DATAERROR         -1
#define KEYBYTES         8
#define subkeyfilename   &quot;Blowfish.dat&quot;

unsigned long P[N + 2];
unsigned long S[4][256];
FILE*         SubkeyFile;

short opensubkeyfile(void) /* read only */
{
   short error;

   error = noErr;

   if((SubkeyFile = fopen(subkeyfilename,&quot;rb&quot;)) == NULL) {
      error = DATAERROR;
   }

   return error;
}

unsigned long F(unsigned long x)
{
   unsigned short a;
   unsigned short b;
   unsigned short c;
   unsigned short d;
   unsigned long  y;

   d = x &amp; 0x00FF;
   x &gt;&gt;= 8;
   c = x &amp; 0x00FF;
   x &gt;&gt;= 8;
   b = x &amp; 0x00FF;
   x &gt;&gt;= 8;
   a = x &amp; 0x00FF;
   //y = ((S[0][a] + S[1][b]) ^ S[2][c]) + S[3][d];
   y = S[0][a] + S[1][b];
   y = y ^ S[2][c];
   y = y + S[3][d];

   return y;
}

void Blowfish_encipher(unsigned long *xl, unsigned long *xr)
{
   unsigned long  Xl;
   unsigned long  Xr;
   unsigned long  temp;
   short          i;

   Xl = *xl;
   Xr = *xr;

   for (i = 0; i &lt; N; ++i) {
      Xl = Xl ^ P[i];
      Xr = F(Xl) ^ Xr;

      temp = Xl;
      Xl = Xr;
      Xr = temp;
   }

   temp = Xl;
   Xl = Xr;
   Xr = temp;

   Xr = Xr ^ P[N];
   Xl = Xl ^ P[N + 1];

   *xl = Xl;
   *xr = Xr;
}

void Blowfish_decipher(unsigned long *xl, unsigned long *xr)
{
   unsigned long  Xl;
   unsigned long  Xr;
   unsigned long  temp;
   short          i;

   Xl = *xl;
   Xr = *xr;

   for (i = N + 1; i &gt; 1; --i) {
      Xl = Xl ^ P[i];
      Xr = F(Xl) ^ Xr;

      /* Exchange Xl and Xr */
      temp = Xl;
      Xl = Xr;
      Xr = temp;
   }

   /* Exchange Xl and Xr */
   temp = Xl;
   Xl = Xr;
   Xr = temp;

   Xr = Xr ^ P[1];
   Xl = Xl ^ P[0];

   *xl = Xl;
   *xr = Xr;
}

short InitializeBlowfish(char key[], short keybytes)
{
   short          i;
   short          j;
   short          k;
   short          error;
   short          numread;
   unsigned long  data;
   unsigned long  datal;
   unsigned long  datar;

   /* First, open the file containing the array initialization data */
   error = opensubkeyfile();
   if (error == noErr) {
      for (i = 0; i &lt; N + 2; ++i) {
	 numread = fread(&amp;data, 4, 1, SubkeyFile);
   #ifdef little_endian      /* Eg: Intel   We want to process things in byte   */
			   /*   order, not as rearranged in a longword          */
	 data = ((data &amp; 0xFF000000) &gt;&gt; 24) |
		((data &amp; 0x00FF0000) &gt;&gt;  8) |
		((data &amp; 0x0000FF00) &lt;&lt;  8) |
		((data &amp; 0x000000FF) &lt;&lt; 24);
   #endif

	 if (numread != 1) {
	    return DATAERROR;
	 } else {
	    P[i] = data;
	 }
      }

      for (i = 0; i &lt; 4; ++i) {
	 for (j = 0; j &lt; 256; ++j) {
	     numread = fread(&amp;data, 4, 1, SubkeyFile);

   #ifdef little_endian      /* Eg: Intel   We want to process things in byte   */
			   /*   order, not as rearranged in a longword          */
	    data = ((data &amp; 0xFF000000) &gt;&gt; 24) |
		   ((data &amp; 0x00FF0000) &gt;&gt;  8) |
		   ((data &amp; 0x0000FF00) &lt;&lt;  8) |
		   ((data &amp; 0x000000FF) &lt;&lt; 24);
   #endif

	     if (numread != 1) {
	       return DATAERROR;
	    } else {
	       S[i][j] = data;
	    }
	 }
      }

      fclose(SubkeyFile);

      j = 0;
      for (i = 0; i &lt; N + 2; ++i) {
	 data = 0x00000000;
	 for (k = 0; k &lt; 4; ++k) {
	    data = (data &lt;&lt; 8) | key[j];
	    j = j + 1;
	    if (j &gt;= keybytes) {
	       j = 0;
	    }
	 }
	 P[i] = P[i] ^ data;
      }

	datal = 0x00000000;
      datar = 0x00000000;

      for (i = 0; i &lt; N + 2; i += 2) {
	 Blowfish_encipher(&amp;datal, &amp;datar);

	 P[i] = datal;
	 P[i + 1] = datar;
      }

      for (i = 0; i &lt; 4; ++i) {
	 for (j = 0; j &lt; 256; j += 2) {

	    Blowfish_encipher(&amp;datal, &amp;datar);

	    S[i][j] = datal;
	    S[i][j + 1] = datar;
	 }
      }
   } else {
      printf(&quot;Unable to open subkey initialization file : %d\n&quot;, error);
   }

   return error;
}
</code></pre>
<p>Blowfish.h</p>
<pre><code class="language-cpp">#define MAXKEYBYTES 56          /* 448 bits */
// #define little_endian 1              /* Eg: Intel */
#define big_endian 1            /* Eg: Motorola */

short opensubkeyfile(void);
unsigned long F(unsigned long x);
void Blowfish_encipher(unsigned long *xl, unsigned long *xr);
void Blowfish_decipher(unsigned long *xl, unsigned long *xr);
</code></pre>
<p>Wie kann ich nun diesen cryptischen krassen blowfisch code mit meinem code verbinden?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219904/blowfish-algo-wie-genutzt</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 13:47:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219904.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 09 Aug 2008 13:27:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Blowfish Algo - wie genutzt? on Sat, 09 Aug 2008 13:27:47 GMT]]></title><description><![CDATA[<p>Guten Tag,<br />
um deutlich zu machen was ich überhaupt will, halte ich mal alles erstmal schlicht.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int main() {
    char text[256] = &quot;&quot;;
    char dec_text[256] = &quot;&quot;;
    char pw[12]   = &quot;&quot;;
    cout &lt;&lt; &quot;Text:&quot; &lt;&lt; endl;
    cin &gt;&gt; text;
    cout &lt;&lt; &quot;Password:&quot; &lt;&lt; endl;
    cin &gt;&gt; pw;
    // Per Blowfisch soll das nun verschlüsselt werden
    dec_text = blowfisch(text, pw);  // :) ?
    cout &lt;&lt; &quot;Verschluesselter Text:&quot; &lt;&lt; dec_text &lt;&lt; endl; 
    return 0;
}
</code></pre>
<p>So stelle ich es mir vor.</p>
<p>Es gibt da auch schon C codestücke zu:<br />
(SOrry, ist einbisschen viel, aber ich blicke da garnicht durch - außerdem haben dann auch interessierte eine grundlage)<br />
blow.cpp:</p>
<pre><code class="language-cpp">#ifdef little_endian   /* Eg: Intel */
   #include &lt;dos.h&gt;
   #include &lt;graphics.h&gt;
   #include &lt;io.h&gt;
#endif

#include &lt;math.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;

#ifdef little_endian   /* Eg: Intel */
   #include &lt;alloc.h&gt;
#endif

#include &lt;ctype.h&gt;

#ifdef little_endian   /* Eg: Intel */
   #include &lt;dir.h&gt;
   #include &lt;bios.h&gt;
#endif

#ifdef big_endian
   #include &lt;Types.h&gt;
#endif

#include &quot;Blowfish.h&quot;

#define N               16
#define noErr            0
#define DATAERROR         -1
#define KEYBYTES         8
#define subkeyfilename   &quot;Blowfish.dat&quot;

unsigned long P[N + 2];
unsigned long S[4][256];
FILE*         SubkeyFile;

short opensubkeyfile(void) /* read only */
{
   short error;

   error = noErr;

   if((SubkeyFile = fopen(subkeyfilename,&quot;rb&quot;)) == NULL) {
      error = DATAERROR;
   }

   return error;
}

unsigned long F(unsigned long x)
{
   unsigned short a;
   unsigned short b;
   unsigned short c;
   unsigned short d;
   unsigned long  y;

   d = x &amp; 0x00FF;
   x &gt;&gt;= 8;
   c = x &amp; 0x00FF;
   x &gt;&gt;= 8;
   b = x &amp; 0x00FF;
   x &gt;&gt;= 8;
   a = x &amp; 0x00FF;
   //y = ((S[0][a] + S[1][b]) ^ S[2][c]) + S[3][d];
   y = S[0][a] + S[1][b];
   y = y ^ S[2][c];
   y = y + S[3][d];

   return y;
}

void Blowfish_encipher(unsigned long *xl, unsigned long *xr)
{
   unsigned long  Xl;
   unsigned long  Xr;
   unsigned long  temp;
   short          i;

   Xl = *xl;
   Xr = *xr;

   for (i = 0; i &lt; N; ++i) {
      Xl = Xl ^ P[i];
      Xr = F(Xl) ^ Xr;

      temp = Xl;
      Xl = Xr;
      Xr = temp;
   }

   temp = Xl;
   Xl = Xr;
   Xr = temp;

   Xr = Xr ^ P[N];
   Xl = Xl ^ P[N + 1];

   *xl = Xl;
   *xr = Xr;
}

void Blowfish_decipher(unsigned long *xl, unsigned long *xr)
{
   unsigned long  Xl;
   unsigned long  Xr;
   unsigned long  temp;
   short          i;

   Xl = *xl;
   Xr = *xr;

   for (i = N + 1; i &gt; 1; --i) {
      Xl = Xl ^ P[i];
      Xr = F(Xl) ^ Xr;

      /* Exchange Xl and Xr */
      temp = Xl;
      Xl = Xr;
      Xr = temp;
   }

   /* Exchange Xl and Xr */
   temp = Xl;
   Xl = Xr;
   Xr = temp;

   Xr = Xr ^ P[1];
   Xl = Xl ^ P[0];

   *xl = Xl;
   *xr = Xr;
}

short InitializeBlowfish(char key[], short keybytes)
{
   short          i;
   short          j;
   short          k;
   short          error;
   short          numread;
   unsigned long  data;
   unsigned long  datal;
   unsigned long  datar;

   /* First, open the file containing the array initialization data */
   error = opensubkeyfile();
   if (error == noErr) {
      for (i = 0; i &lt; N + 2; ++i) {
	 numread = fread(&amp;data, 4, 1, SubkeyFile);
   #ifdef little_endian      /* Eg: Intel   We want to process things in byte   */
			   /*   order, not as rearranged in a longword          */
	 data = ((data &amp; 0xFF000000) &gt;&gt; 24) |
		((data &amp; 0x00FF0000) &gt;&gt;  8) |
		((data &amp; 0x0000FF00) &lt;&lt;  8) |
		((data &amp; 0x000000FF) &lt;&lt; 24);
   #endif

	 if (numread != 1) {
	    return DATAERROR;
	 } else {
	    P[i] = data;
	 }
      }

      for (i = 0; i &lt; 4; ++i) {
	 for (j = 0; j &lt; 256; ++j) {
	     numread = fread(&amp;data, 4, 1, SubkeyFile);

   #ifdef little_endian      /* Eg: Intel   We want to process things in byte   */
			   /*   order, not as rearranged in a longword          */
	    data = ((data &amp; 0xFF000000) &gt;&gt; 24) |
		   ((data &amp; 0x00FF0000) &gt;&gt;  8) |
		   ((data &amp; 0x0000FF00) &lt;&lt;  8) |
		   ((data &amp; 0x000000FF) &lt;&lt; 24);
   #endif

	     if (numread != 1) {
	       return DATAERROR;
	    } else {
	       S[i][j] = data;
	    }
	 }
      }

      fclose(SubkeyFile);

      j = 0;
      for (i = 0; i &lt; N + 2; ++i) {
	 data = 0x00000000;
	 for (k = 0; k &lt; 4; ++k) {
	    data = (data &lt;&lt; 8) | key[j];
	    j = j + 1;
	    if (j &gt;= keybytes) {
	       j = 0;
	    }
	 }
	 P[i] = P[i] ^ data;
      }

	datal = 0x00000000;
      datar = 0x00000000;

      for (i = 0; i &lt; N + 2; i += 2) {
	 Blowfish_encipher(&amp;datal, &amp;datar);

	 P[i] = datal;
	 P[i + 1] = datar;
      }

      for (i = 0; i &lt; 4; ++i) {
	 for (j = 0; j &lt; 256; j += 2) {

	    Blowfish_encipher(&amp;datal, &amp;datar);

	    S[i][j] = datal;
	    S[i][j + 1] = datar;
	 }
      }
   } else {
      printf(&quot;Unable to open subkey initialization file : %d\n&quot;, error);
   }

   return error;
}
</code></pre>
<p>Blowfish.h</p>
<pre><code class="language-cpp">#define MAXKEYBYTES 56          /* 448 bits */
// #define little_endian 1              /* Eg: Intel */
#define big_endian 1            /* Eg: Motorola */

short opensubkeyfile(void);
unsigned long F(unsigned long x);
void Blowfish_encipher(unsigned long *xl, unsigned long *xr);
void Blowfish_decipher(unsigned long *xl, unsigned long *xr);
</code></pre>
<p>Wie kann ich nun diesen cryptischen krassen blowfisch code mit meinem code verbinden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561820</guid><dc:creator><![CDATA[LarsB.]]></dc:creator><pubDate>Sat, 09 Aug 2008 13:27:47 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish Algo - wie genutzt? on Sat, 09 Aug 2008 13:42:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie kann ich nun diesen cryptischen krassen blowfisch code mit meinem code verbinden?</p>
</blockquote>
<p>Indem du dich mit dem Thema beschäftigst und es verstehen lernst, dann kannst du dir auch leicht eine eigene Implementierung schreiben.<br />
Oder du machst es auf die einfache Art, schaust in die Doku, oder falls die nicht vorhanden ist, schaust du dir die verfügbare Schnittstelle an und dann sollte das auch kein Problem mehr sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561825</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 09 Aug 2008 13:42:41 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish Algo - wie genutzt? on Sat, 09 Aug 2008 14:00:50 GMT]]></title><description><![CDATA[<p>naja, dieses codestückchen müsste auch so arbeiten! ich weiß nur nicht wie. kann mir dabei wer von euch helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561843</guid><dc:creator><![CDATA[larsb.]]></dc:creator><pubDate>Sat, 09 Aug 2008 14:00:50 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish Algo - wie genutzt? on Sat, 09 Aug 2008 14:07:39 GMT]]></title><description><![CDATA[<p>Crypto++</p>
<p>ist echt ein wenig mehr C++ ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1561847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1561847</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 09 Aug 2008 14:07:39 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish Algo - wie genutzt? on Sat, 09 Aug 2008 22:45:42 GMT]]></title><description><![CDATA[<p>Cryto++ kenne ich, will ich aber nicht nutzen.<br />
Der code oben müsste eigt. reichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562066</guid><dc:creator><![CDATA[larsB]]></dc:creator><pubDate>Sat, 09 Aug 2008 22:45:42 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish Algo - wie genutzt? on Mon, 11 Aug 2008 06:10:12 GMT]]></title><description><![CDATA[<p>Lies die Doku bzw. die Beispiele zu dem Code.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562451</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Mon, 11 Aug 2008 06:10:12 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish Algo - wie genutzt? on Mon, 11 Aug 2008 07:49:35 GMT]]></title><description><![CDATA[<p>LarsB. schrieb:</p>
<blockquote>
<p>...Wie kann ich nun diesen cryptischen krassen blowfisch code mit meinem code verbinden?</p>
</blockquote>
<p>Also ehrlich gesagt: Ich weiß gar nicht, wo Dein Problem liegt ?<br />
Du hast Dein aufrufendes Programm (mit main()) und das &quot;Angelieferte&quot; (mit Blowfish_encipher() und -decipher()).<br />
Einziger Unterschied ist halt noch, dass die auzurufende Funktion nicht &quot;blowfish()&quot; heisst, sondern eben &quot;Blowfish_encipher()&quot; ...</p>
<p>Vielleicht fehlen Dir auch noch 2 Informationen:<br />
1.) In Deiner Entwicklungsumgebung verbindest Du verschiedene Module über &quot;includieren&quot; und &quot;linken&quot;<br />
2.) Zum Ver-/Entschlüsseln gehört immer auch ein &quot;Schlüssel&quot; (wird hier anscheinend separat der Funktion &quot;Initialize_Blowfish()&quot; übergeben) ... das hat aber nichts mit C oder C++ zu tun, sondern darüber musst Du Dir inhaltlich Gedanken machen: Wo kommt der her bzw. wo legst Du den ab ?</p>
<p>BTW: Mir scheint das eine ziemlich garstige Blowfish-Implementation zu sein (so mit Schlüsselteile in Files ablegen) und auch programmiertechnisch ist das ziemlich übel (warum kommen eigentlich die Leute immer wieder auf die Idee, Variablen a,b,c,d, ... zu nennen ?).<br />
ich weiß jedenfalls nicht, warum Du an diesem Code so hängst, wo es doch deutlich bessere (hier schon genannte) Alternativen gibt.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562480</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 11 Aug 2008 07:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish Algo - wie genutzt? on Mon, 11 Aug 2008 10:34:04 GMT]]></title><description><![CDATA[<p>Ich wollte nur ein zwei dateien haben wo blowfish impliziert ist und keine ganze api. Vor alem verplichtet crypt++ wie ich lass zur nutzung der GPL.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562585</guid><dc:creator><![CDATA[larsB]]></dc:creator><pubDate>Mon, 11 Aug 2008 10:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish Algo - wie genutzt? on Mon, 11 Aug 2008 10:37:56 GMT]]></title><description><![CDATA[<p>larsB schrieb:</p>
<blockquote>
<p>Ich wollte nur ein zwei dateien haben wo blowfish impliziert ist und keine ganze api.</p>
</blockquote>
<p>1. Das hast Du ja.<br />
2. Es heisst implementiert, nicht impliziert.</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562587</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Mon, 11 Aug 2008 10:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish Algo - wie genutzt? on Mon, 11 Aug 2008 13:42:31 GMT]]></title><description><![CDATA[<p>larsB schrieb:</p>
<blockquote>
<p>...Vor alem verplichtet crypt++ wie ich lass zur nutzung der GPL.</p>
</blockquote>
<p>Das sehe ich ein.<br />
Trotzdem vermute ich, dass Du bessere (auch &quot;freie&quot;) Implementierungen von blowfish bekommst... auch, wenn ich Dir keine konkrete nennen kann.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1562719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562719</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 11 Aug 2008 13:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to Blowfish Algo - wie genutzt? on Mon, 11 Aug 2008 13:48:44 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Trotzdem vermute ich, dass Du bessere (auch &quot;freie&quot;) Implementierungen von blowfish bekommst... auch, wenn ich Dir keine konkrete nennen kann.</p>
</blockquote>
<p>wahrscheinlich das original: <a href="http://www.schneier.com/code/bfsh-sch.zip" rel="nofollow">http://www.schneier.com/code/bfsh-sch.zip</a><br />
<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>
]]></description><link>https://www.c-plusplus.net/forum/post/1562723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1562723</guid><dc:creator><![CDATA[-fricky]]></dc:creator><pubDate>Mon, 11 Aug 2008 13:48:44 GMT</pubDate></item></channel></rss>