128 Bit oder 256 Bit schlüssel errechnen mittels Hash funktion
-
Mati schrieb:
Ich muss zusätzlich Zeitperformant bleiben
äää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

-
Hallo
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.
bis bald
akari
-
Alle Casts bis auf den dynamic_cast werden ausschließlich zur Compile Time ausgewertet, und haben zur Laufzeit keinen Einfluß mehr.
Falsch.
-
Hallo
@ nöö : und kannst du deine "Kritik" auch begründen?
bis bald
akari
-
begründung?
edit: Akari war schneller..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

-
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...
btw: eigentlich kommen nur casts von pointer nach pointer ohne berechnungen aus. naja, mit ausnahe dieses c++-geraffels 'dynamic_blah<p*>', das die ganze vererbungsliste durchrattern muss.
-
Hallo
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
unsigned short test = 10; unsigned int test2 = std::numeric_limits<unsigned int>().max(); reinterpret_cast<unsigned int>(test) = test2;Hier wird der Compiler gezwungen, die 2 Bytes des shorts mit den 4 Bytes des ints zu überschreiben, was demzufolge auch unzulässig ist.
Casts selber (bis auf den dynamic_cast) verändern gar nichts./Edit :
Ein guter Compiler läßt mein Beispiel gar nicht durch. Aber so kompilierts, und verursacht trotzdem Speicherfehlerunsigned short test = 10; unsigned int test2 = std::numeric_limits<unsigned int>().max(); *(reinterpret_cast<unsigned int*>(&test)) = test2;bis bald
akari
-
probier doch mal sowas:
int main (int a, char **b) { double d = (double)a; // c++ casts auch mal probieren std::cout << d << std::endl; }und schau dir das disassembly an.
ich könnte wetten, dass zum konvertieren eine versteckte funktion aufgerufen wird...
-
Hallo
ja, die "versteckte Funktion" ist der Konstruktor von double.
Egal was aus dem Cast von a kommt, durch die Dekalration von double wird auf jedenfall ein gültiges double initialisiert.bis bald
akari
-
akari schrieb:
Egal was aus dem Cast von a kommt,
eben nicht. der inhalt von 'd' ist davon abhängig.
-
Hallo
okay, dann zieh ich meine erste Aussage zurück. Und grenze sie auf Pointer ein.
bis bald
akari
-
hmm.jetzt bin ich verwirrt - könnte jemand nochmal kurz zusammenfassen was unser ergebnis nun ist? Danke :p