2016-11-17 2 views
0

Ich habe einen Verschlüsselungsschlüssel, der 32-Bit im Hexadezimalformat ist. Aber ich habe nur 22 Bits. Ich muss den Klartext finden. Mein Denkprozess besteht darin, einen Brute-Force-Angriff auszuführen und die anderen 10 Bits zu finden. Mir wurde auch der Chiffretext gegeben. Die verwendete Verschlüsselung ist AES im 128-Bit-ECB-Modus. Ich benutze Python, aber ich habe gerade angefangen es zu lernen, also bin ich noch kein Experte.Python - Generieren aller Kombinationen von Hexadezimalwerten

Mein Ansatz ist es, den 22-Bit-Schlüssel zu nehmen und die anderen 10 Bits zu verketten, diese zusammen mit dem Ciphertext und Decrypt in AES einzufügen, um zu prüfen, ob einer der resultierenden Sätze einem richtigen Satz ähnelt. Der einzige Teil, auf dem ich feststecke, erzeugt die 10-Bit-Hexadezimal-Zeichenfolge.

Dies ist die Ausgabe, die ich will:

0000000000 
0000000001 
0000000002 
... 
000000000F 
... 
FFFFFFFFFF 

Was ist ein Ansatz, den ich, dies zu tun verwenden könnte? Ich habe versucht, ein Wörterbuch zu erstellen und allen hexadezimalen Werten numerische Werte zuzuweisen, aber ich bleibe beim Schreiben einer Schleife, die die gewünschte Sequenz als Ausgabe geben könnte.

+1

Sie wollen also eine Möglichkeit, Strings der Länge 10 aller möglichen hexadezimale Zahlen zu generieren? – James

Antwort

3
def gen_all_hex(): 
    i = 0 
    while i < 16**10: 
     yield "{:010X}".format(i) 
     i += 1 

for s in gen_all_hex(): 
    print(s) 

Ergebnis:

0000000000 
0000000001 
0000000002 
0000000003 
0000000004 
0000000005 
0000000006 
0000000007 
0000000008 
0000000009 
000000000A 
000000000B 
000000000C 
000000000D 
000000000E 
000000000F 
0000000010 
0000000011 
0000000012 
0000000013 
0000000014 
0000000015 
0000000016 
0000000017 
0000000018 
0000000019 
000000001A 
... 

Beachten Sie, dass es eine lange Zeit dauern wird, bis alle 1.099.511.627.776 Werte zu durchlaufen.

+2

Addendum: Ich habe es in Erwägung gezogen, 'für i im Bereich (16 ** 10) zu tun:' anstelle einer while-Schleife, aber dann ist es nicht versionsübergreifend kompatibel. In Python 2.7 erhalten Sie 'OverflowError: range() result hat zu viele Elemente'. – Kevin

+0

Genau das wollte ich machen. Können Sie erklären, was die "Ausbeute" {: 010x} ". Format (i) .upper()" tut? Weil ich verstehen möchte, was der Code tut, bevor ich ihn benutze. – ss1111

+0

Ok. "{: 010x}" ist ein Formatspezifizierer. Wenn Sie 'format (i)' darauf aufrufen, erzeugt es eine String-Version von 'i' entsprechend den Parametern im Spezifizierer. die erste 0 bedeutet "pad die Zeichenfolge mit Nullen, wenn es nicht die maximale Breite ist". die 10 danach bedeutet "die maximale Breite ist 10". Das x bedeutet "wandle diese Zahl in Hexadezimal" um. Der nachfolgende "obere" Aufruf konvertiert die Zahl in Großbuchstaben. ['yield'] (http://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do) nimmt den Wert und übergibt ihn so in 'for s in gen_all_hex():' scope wir können es drucken. – Kevin

1
from itertools import product 

print(map(''.join, product('ABCDEF', repeat=2))) 

repeat=2 ist für Demo-Zwecke, erhöhen offensichtlich, dass bis 10.

Für Python 3, wenn Sie tatsächlich sehen wollen Dinge gedruckt, list(map(...)) verwenden.

Ausgang:

['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0A', '0B', '0C', '0D', '0E', '0F', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1A', '1B', '1C', '1D', '1E', '1F', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2A', '2B', '2C', '2D', '2E', '2F', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3A', '3B', '3C', '3D', '3E', '3F', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4A', '4B', '4C', '4D', '4E', '4F', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5A', '5B', '5C', '5D', '5E', '5F', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6A', '6B', '6C', '6D', '6E', '6F', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7A', '7B', '7C', '7D', '7E', '7F', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8A', '8B', '8C', '8D', '8E', '8F', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9A', '9B', '9C', '9D', '9E', '9F', 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'BA', 'BB', 'BC', 'BD', 'BE', 'BF', 'C0', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'CA', 'CB', 'CC', 'CD', 'CE', 'CF', 'D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'DA', 'DB', 'DC', 'DD', 'DE', 'DF', 'E0', 'E1', 'E2', 'E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9', 'EA', 'EB', 'EC', 'ED', 'EE', 'EF', 'F0', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'FA', 'FB', 'FC', 'FD', 'FE', 'FF'] 
Verwandte Themen