Warum müssen alle Eingänge auf die AES, die ein Vielfaches von 16?
Ich bin mit dem PyCrypto Implementierung von AES und ich bin versucht zu verschlüsseln text (24 bytes) mit einem 24-byte-Schlüssel.
aes_ecb = AES.new('\x00'*24, AES.MODE_ECB)
aes_ecb.encrypt("123456"*4)
Bekomme ich diesen merkwürdigen Fehler ValueError: Input strings must be a multiple of 16 in length
Also warum ist es, dass meine Eingabe muss ein Vielfaches von 16 sein? Es würde mehr Sinn machen für mich, dass der Eingabe-string-Länge muss ein Vielfaches von meinem Schlüssel (Größe, denn dies würde es ermöglichen, schöne bitweise Operationen zwischen dem Schlüssel und Blöcke von Klartext.
Du musst angemeldet sein, um einen Kommentar abzugeben.
AES ist ein block cipher. Zitat aus dem Wikipedia-Seite: "ein block cipher ist ein deterministischer Algorithmus, der Betrieb auf eine Feste Länge Gruppen von bits".
AES kann nur arbeiten mit Blöcken von 128 bit (also 16 Zeichen, als Sie bemerkt).
Wenn Sie Ihre Eingabe Längen andere als ein Vielfaches von 128, je nach Anwendung, die Sie haben können, sehr vorsichtig sein, wie Sie mit Polsterung.
Möchte nur hinzufügen, Infos über mods von Operationen
Ja, AES ist ein 128-bit (16-byte) block cipher mit mehrere mögliche Schlüssellänge (128, 192, 256), aber die Ursache dieses Textes Polsterung Einschränkung (und Fehler msg) ist EZB Betriebsart. ECB ist die einfachste Verschlüsselung Modi. Ich weiß nicht, Ihre Ziele, so wird, überspringen Sie einfach den Teil, der es nicht eine ernste Botschaft Vertraulichkeit.
CBC und CTR sind häufiger und in der Regel angemessen, und im CTR-Modus brauchen Sie nicht 128-bit-message-Länge.
Gibt es auch ciphertext stealing (CTS) Methode für die EZB und CBC-Modi.
Aber Ciphertext stealing für EZB-Modus erfordert, dass der Klartext länger als ein 128-bit-block.
Weil die block Größe ist 16 bytes, die Art und Weise, dies zu behandeln ist, um hinzufügen Polsterung beim verschlüsseln.