<?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[128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine hashfunktion die für double vektoren einen 32 Bit schlüssel errechnet. Das läuft super!</p>
<p>Jetzt reicht mir der 32 Bit schlüssel definitiv nicht! Ich brauche mindestens 128 Bit. Oder besser 256 BIt. Allerdings habe ich schwierigkeiten bei solchen Bitgrössen die funktion um zuschreiben....vielleicht hat jemand eine gute Idee?</p>
<p>Hier erstmal die alte variante mit 32 Bit:</p>
<p>Zur erklärung:<br />
für jedes vektor element errechne ich einen 32 Bit key der addiert wird zum vorherigen ergebnis.<br />
Ein 32 Bit wert für einen double wird so errechnet:<br />
auf ganzzahl 64 Bit casten, dann die oberen 32 Bit mit den unteren verXORen<br />
und dann die unteren 32 Bit rausschmeissen.</p>
<pre><code class="language-cpp">...
typedef unsigned int U_Int32;

...
U_Int32 
Hash::compute_key(const double* vec, size_t size) const
{                
    U_Int32 ret = 0;
    while(size--)
    {
        ret = (ret * 31) + hash_double(*vec);
        vec++;
    } 
    return ret;
}

inline U_Int32 
Hash::hash_double(double x)
{ 
    U_Int64* p = reinterpret_cast&lt; U_Int64* &gt; (&amp;x); 
    return *p ^ (*p &gt;&gt; 32); 
}
</code></pre>
<p>ginge das irgendwie mittels unsigned long long ? sind dann aber wohl net 256 BIt oder?</p>
<p>danke euch</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/165574/128-bit-oder-256-bit-schlüssel-errechnen-mittels-hash-funktion</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 21:36:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/165574.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Nov 2006 10:46:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 10:46:42 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine hashfunktion die für double vektoren einen 32 Bit schlüssel errechnet. Das läuft super!</p>
<p>Jetzt reicht mir der 32 Bit schlüssel definitiv nicht! Ich brauche mindestens 128 Bit. Oder besser 256 BIt. Allerdings habe ich schwierigkeiten bei solchen Bitgrössen die funktion um zuschreiben....vielleicht hat jemand eine gute Idee?</p>
<p>Hier erstmal die alte variante mit 32 Bit:</p>
<p>Zur erklärung:<br />
für jedes vektor element errechne ich einen 32 Bit key der addiert wird zum vorherigen ergebnis.<br />
Ein 32 Bit wert für einen double wird so errechnet:<br />
auf ganzzahl 64 Bit casten, dann die oberen 32 Bit mit den unteren verXORen<br />
und dann die unteren 32 Bit rausschmeissen.</p>
<pre><code class="language-cpp">...
typedef unsigned int U_Int32;

...
U_Int32 
Hash::compute_key(const double* vec, size_t size) const
{                
    U_Int32 ret = 0;
    while(size--)
    {
        ret = (ret * 31) + hash_double(*vec);
        vec++;
    } 
    return ret;
}

inline U_Int32 
Hash::hash_double(double x)
{ 
    U_Int64* p = reinterpret_cast&lt; U_Int64* &gt; (&amp;x); 
    return *p ^ (*p &gt;&gt; 32); 
}
</code></pre>
<p>ginge das irgendwie mittels unsigned long long ? sind dann aber wohl net 256 BIt oder?</p>
<p>danke euch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178322</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Tue, 21 Nov 2006 10:46:42 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 10:52:06 GMT]]></title><description><![CDATA[<p>long long ist erstens (afair) kein Standard-Datentyp und zweitens ca 64 Bit lang. Für deine Anwendung könntest du mit bitset&lt;&gt; arbeiten (auch wenn du vermutlich dafür die int-Operationen selber nachbauen mußt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178332</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 21 Nov 2006 10:52:06 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 11:14:28 GMT]]></title><description><![CDATA[<p>danke...<br />
hmm...ich bin am überlegen wie ich die methode auf bitsets umschreiben könnte....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178358</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Tue, 21 Nov 2006 11:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 11:36:53 GMT]]></title><description><![CDATA[<p>hi,<br />
guckst du: <a href="http://www.cs.umd.edu/~mhshin/doc/802.11/802.11i-D3.0.pdf" rel="nofollow">http://www.cs.umd.edu/~mhshin/doc/802.11/802.11i-D3.0.pdf</a><br />
absatz 5.1 PRF reference code.<br />
das ist so'ne kryptografische hashfunktion, die unterschiedliche schlüssellängen ausspucken kann...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178381</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178381</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 21 Nov 2006 11:36:53 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 13:29:18 GMT]]></title><description><![CDATA[<p>merci...<br />
aber bezieht sich das nicht auf char input? Kann es sein dass nur inputs bis maximal 64 erlaubt sind?</p>
<p>...bin mir unsicher ob ich das für meine double bzw. ganzzahligen werte verwenden kann?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178505</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Tue, 21 Nov 2006 13:29:18 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 13:42:11 GMT]]></title><description><![CDATA[<p>Mati schrieb:</p>
<blockquote>
<p>aber bezieht sich das nicht auf char input? Kann es sein dass nur inputs bis maximal 64 erlaubt sind?</p>
</blockquote>
<p>das gilt für den key, den man da reinmixen soll, damit der output noch 'zufälliger' wird. ist es ein 64-byte langer key, dann haste eine 'PRF-512'. die länge der daten, die gehashed werden sollen, ist aber variabel...</p>
<p>Mati schrieb:</p>
<blockquote>
<p>...bin mir unsicher ob ich das für meine double bzw. ganzzahligen werte verwenden kann?</p>
</blockquote>
<p>ist ja nicht so schlimm. musste halt dein double-array in char* casten.<br />
(ich glaub' vor kurzem hatte hier einer exakt das gleiche thema <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1178525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178525</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 21 Nov 2006 13:42:11 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 14:49:17 GMT]]></title><description><![CDATA[<p>hui. danke....<br />
hmm....ich brauche aber ganzzahlen weil ich rumshifte später auf den keys....und bitoperationen mache....müsste halt 2mal casten...einmal in char und dann wieder zurück - ginge das? Ich muss zusätzlich Zeitperformant bleiben - 2maliges casten - ist das nicht zu teuer? Ich arbeite mit riesigen dimensionen: vektoren können 2000, 50000 und im extremfall 500 000 000 einträge haben ....deswegen die frage nach dem casten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178599</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Tue, 21 Nov 2006 14:49:17 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 14:57:07 GMT]]></title><description><![CDATA[<p>Mati schrieb:</p>
<blockquote>
<p>Ich muss zusätzlich Zeitperformant bleiben</p>
</blockquote>
<p>äääh, ach so, naja, an typecasts solls nicht scheitern aber wenn's um speed geht, würde ich eine PRF nicht nehmen. die verwendet zum verscramblen intern den SHA-1 algo und sowas hat zwar 'ne gewisse kryptografische qualität, ist aber leider alles andere als schnell <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178607</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 21 Nov 2006 14:57:07 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 15:19:11 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>oder um es anders zu sagen : Die Casts an sich werden nichts verlangsamen. Alle Casts bis auf den dynamic_cast werden ausschließlich zur Compile Time ausgewertet, und haben zur Laufzeit keinen Einfluß mehr.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178620</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 21 Nov 2006 15:19:11 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 15:18:32 GMT]]></title><description><![CDATA[<blockquote>
<p>Alle Casts bis auf den dynamic_cast werden ausschließlich zur Compile Time ausgewertet, und haben zur Laufzeit keinen Einfluß mehr.</p>
</blockquote>
<p>Falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178622</guid><dc:creator><![CDATA[nöö]]></dc:creator><pubDate>Tue, 21 Nov 2006 15:18:32 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 15:20:49 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>@ nöö : und kannst du deine &quot;Kritik&quot; auch begründen?</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178624</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 21 Nov 2006 15:20:49 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 15:23:07 GMT]]></title><description><![CDATA[<p>begründung?<br />
edit: Akari war schneller..</p>
<p>scheiße....prf ist also langsam und SHA auch? *grmpf....vielleicht sollte ich doch mit bitsets irgendwie arbeiten.....ach die welt wär doch so schön <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1178627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178627</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Tue, 21 Nov 2006 15:23:07 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 15:38:33 GMT]]></title><description><![CDATA[<p>akari: denk doch mal nur an 'nen einfachen cast von 'int' nach 'double' oder umgekehrt. das sind ganz andere formate, das muss zur laufzeit umgerechnet werden...<br />
btw: eigentlich kommen nur casts von pointer nach pointer ohne berechnungen aus. naja, mit ausnahe dieses c++-geraffels 'dynamic_blah&lt;p*&gt;', das die ganze vererbungsliste durchrattern muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178643</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 21 Nov 2006 15:38:33 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 15:58:26 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Nein, es wird nichts gerechnet. Sondern der Compiler wird gezwungen, den Speicherbereich des Arguments wie vom Typ des Cast-Ziels zu behandeln. Das kann auch zu Speicherfehlzugriffen führen. Zum Beispiel so</p>
<pre><code class="language-cpp">unsigned short test = 10;
unsigned int test2 = std::numeric_limits&lt;unsigned int&gt;().max();
reinterpret_cast&lt;unsigned int&gt;(test) = test2;
</code></pre>
<p>Hier wird der Compiler gezwungen, die 2 Bytes des shorts mit den 4 Bytes des ints zu überschreiben, was demzufolge auch unzulässig ist.<br />
Casts selber (bis auf den dynamic_cast) verändern gar nichts.</p>
<p>/Edit :<br />
Ein guter Compiler läßt mein Beispiel gar nicht durch. Aber so kompilierts, und verursacht trotzdem Speicherfehler</p>
<pre><code class="language-cpp">unsigned short test = 10;
unsigned int test2 = std::numeric_limits&lt;unsigned int&gt;().max();
*(reinterpret_cast&lt;unsigned int*&gt;(&amp;test)) = test2;
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178655</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 21 Nov 2006 15:58:26 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 16:13:59 GMT]]></title><description><![CDATA[<p>probier doch mal sowas:</p>
<pre><code>int main (int a, char **b)
{
   double d = (double)a;         // c++ casts auch mal probieren
   std::cout &lt;&lt; d  &lt;&lt; std::endl;
}
</code></pre>
<p>und schau dir das disassembly an.<br />
ich könnte wetten, dass zum konvertieren eine versteckte funktion aufgerufen wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178674</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 21 Nov 2006 16:13:59 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 16:20:09 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ja, die &quot;versteckte Funktion&quot; ist der Konstruktor von double.<br />
Egal was aus dem Cast von a kommt, durch die Dekalration von double wird auf jedenfall ein gültiges double initialisiert.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178678</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 21 Nov 2006 16:20:09 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 16:26:04 GMT]]></title><description><![CDATA[<p>akari schrieb:</p>
<blockquote>
<p>Egal was aus dem Cast von a kommt,</p>
</blockquote>
<p>eben nicht. der inhalt von 'd' ist davon abhängig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178685</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Tue, 21 Nov 2006 16:26:04 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 16:37:37 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>okay, dann zieh ich meine erste Aussage zurück. Und grenze sie auf Pointer ein.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178692</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 21 Nov 2006 16:37:37 GMT</pubDate></item><item><title><![CDATA[Reply to 128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion on Tue, 21 Nov 2006 20:46:22 GMT]]></title><description><![CDATA[<p>hmm.jetzt bin ich verwirrt - könnte jemand nochmal kurz zusammenfassen was unser ergebnis nun ist? Danke :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1178803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1178803</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Tue, 21 Nov 2006 20:46:22 GMT</pubDate></item></channel></rss>