Ich habe eine sehr grundlegende Frage über das Ausgabeformat von os.urandom
in Python2 und Byte-Darstellung allgemeiner. Ein Byte 8 Bits, so beispielsweise in binären ein bestimmtes einzelnen Byte wäre:os.urandom und Byte-Darstellung
10011001
os.urandom(n)
gibt eine Zufall n-Byte-String für kryptographische Verwendung. Wenn ich ein paar Anrufe zu os.urandom(1)
ausdrucken, nur ein einziges Byte zu erzeugen, finde ich Dinge wie:
'\x1f', '\xa0', '#', '\xa4', "'", '\xa8', '+', '\xac', '/', '\xb0', '3', '\xb4', '7', '\xb8', ';', '\xbc', '?', '\xc0', 'C', '\xc4', 'G', '\xc8', 'K', '\xcc', 'O', '\xd0', 'S', '\xd4', 'W', '\xd8', '['
So scheint es, dass urandom()
ein Byte repräsentiert nicht als 8 Bit, sondern als 2-stellige Hex-Zahlen (beide macht natürlich Sinn weil 2^8 = 16^2). Meine Verwirrung ist, dass nur einige der oben genannten 2-stellige Hex-Zahlen sind, gibt es auch Zeichen wie "S" oder "?" oder '['. Was ist das Ausgabeformat? Wie lautet die Regel für das Konvertieren einer Ausgabe wie '[' in binär?
Ah, ich sehe jetzt. Die ASCII-Tabelle erstreckt sich auf 127, und so werden die Bits 0 bis 127 über ihre ASCII-Darstellung angezeigt und die restlichen Bits werden in Hex ausgegeben. Vielen Dank! –
Es ist kniffliger als nur das, aber ya, das ist die Grundidee. Zum Beispiel sind die Bytes 0 bis 31 nicht "druckbar", also erscheinen sie auch als hex-Escape. –