Für Krypto-Experten habe ich eine Frage, die mir kürzlich in den Sinn kam. Nehmen wir zum Beispiel an, dass wir eine lange Folge von Bytes haben, und wir wollen diese Zeichenfolge in eine Hash-Funktion einfügen, die wir zur Veranschaulichung als SHA1 verwenden können. Wie wir wissen, nimmt SHA1 Eingaben in 64-Byte-Blöcken vor und jede Hash-Funktion, die afaik benötigt, um die Nachricht vor der Verarbeitung aufzufüllen. Jetzt ist die Frage, ob es der letzte Brocken ist, der gepolstert werden muss oder die ganze Schnur? Es wird eine Rolle spielen, denn am Ende des Auffüllens werden wir die Länge anhängen. Danke allen.Padding Ausgabe von Long Hashes
0
A
Antwort
0
Jetzt ist die Frage, dass es der letzte Brocken ist, der gepolstert werden muss oder die ganze Schnur?
Ich glaube beide Dinge sind gleich. Das Auffüllen der gesamten Zeichenfolge bedeutet, dass nur der letzte Block aufgefüllt wird.
Einige Pseudo-Code aus guten alten Wiki here
Ein Blick auf den Code könnte Ihnen einige Einblicke geben:
von Genommen: mattmahoney.net/dc/sha1.c
void SHA1PadMessage(SHA1Context *context)
{
/*
* Check to see if the current message block is too small to hold
* the initial padding bits and length. If so, we will pad the
* block, process it, and then continue padding into a second
* block.
*/
if (context->Message_Block_Index > 55)
{
context->Message_Block[context->Message_Block_Index++] = 0x80;
while(context->Message_Block_Index < 64)
{
context->Message_Block[context->Message_Block_Index++] = 0;
}
SHA1ProcessMessageBlock(context);
while(context->Message_Block_Index < 56)
{
context->Message_Block[context->Message_Block_Index++] = 0;
}
}
else
{
context->Message_Block[context->Message_Block_Index++] = 0x80;
while(context->Message_Block_Index < 56)
{
context->Message_Block[context->Message_Block_Index++] = 0;
}
}
/*
* Store the message length as the last 8 octets
*/
context->Message_Block[56] = context->Length_High >> 24;
context->Message_Block[57] = context->Length_High >> 16;
context->Message_Block[58] = context->Length_High >> 8;
context->Message_Block[59] = context->Length_High;
context->Message_Block[60] = context->Length_Low >> 24;
context->Message_Block[61] = context->Length_Low >> 16;
context->Message_Block[62] = context->Length_Low >> 8;
context->Message_Block[63] = context->Length_Low;
SHA1ProcessMessageBlock(context);
}
Verwandte Themen
- 1. PowerShell Long Text Einzug/Padding
- 2. Padding gedruckte Ausgabe von tabellarischen Daten
- 3. css navbar responsive padding ausgabe
- 4. Entfernen von Hashes in R-Ausgabe von RMarkdown und Knitr
- 5. Hinzufügen von Hashes zu Hashes (Ruby)
- 6. Ionic Angular Ion-Content Padding Ausgabe
- 7. Weird-Ausgabe für Printf Unsigned Long
- 8. long long vs int Multiplikation
- 9. Vergleichen von Python Hashes
- 10. Zusammenführen von zwei Hashes
- 11. einen Hash von Hashes
- 12. Konvertieren von Ruby-Hashes
- 13. Array von Hashes
- 14. ein Array von Hashes
- 15. Array von Hashes Probleme
- 16. Was ist der Unterschied zwischen "Long" und "Long Int" und "Long Long" vs "Long Long Int"
- 17. unsigned long long arithmetics
- 18. Manipulieren und auf den Inhalt eines Hashes von Hashes zugreifen
- 19. Hashes of Hashes Idiom in Ruby?
- 20. Wie Arrays von Hashes in Rails basiert auf Schlüssel von Hashes verschmelzen
- 21. Padding von ImageButton entfernen
- 22. Iterieren durch Array von Hashes
- 23. Konvertieren von Hashes in CSV
- 24. Mischen von Hashes in Arrays
- 25. erb: iterieren Array von Hashes
- 26. Erstellen von Hashes für Passwörter
- 27. mongodb: ein Array von Hashes
- 28. Padding Arbeit für padding-right
- 29. Gute numerische Hashes
- 30. GAE, JDO Wie Abfrage Primärschlüssel von Long/Long Typ
Aber in Ihrem Fall Länge der gesamten Zeichenkette nicht gleich der Länge des letzten nicht aufgefüllten Abschnitts der Zeichenfolge. Und nach dem Auffüllen müssen wir die Länge in den letzten 8 Bytes einfügen. Aber welche Länge ist das? Ist es die Länge der ganzen Nachricht? –
ja ... Länge der gesamten Nachricht mit der Polsterung – PRP
Wenn ja danke, sehr feine Details verwischt manchmal Dinge :) –