2015-12-17 4 views
9

Ich möchte einen Befehl zusammenstellen, der eine Folge von 32 hexadezimalen Ziffern ausgibt. Ich habe ein Python-Skript bekam, das funktioniert:Wie bekomme ich eine zufällige Zeichenfolge von 32 hexadezimalen Ziffern über die Befehlszeile?

python -c 'import random ; print "".join(map(lambda t: format(t, "02X"), [random.randrange(256) for x in range(16)]))' 

Dies erzeugt eine Ausgabe wie:

6EF6B30F9E557F948C402C89002C7C8A 

Was ist das, was ich brauche.

Auf einem Mac, kann ich dies auch tun:

uuidgen | tr -d '-' 

Ich habe jedoch keinen Zugriff auf die anspruchsvollere Skriptsprachen Ruby und Python, und ich werde auf einem Mac nicht (so keine Uuidgen). Ich muss mit mehr bash'ish Werkzeugen wie sed, awk,/dev/random bleiben, weil ich auf einer begrenzten Plattform bin. Gibt es eine Möglichkeit, dies zu tun?

+2

'Kopf -c16 Biffen

Antwort

21

Wenn Sie hexdump haben dann:

hexdump -n 16 -e '4/4 "%08X" 1 "\n"' /dev/random 

die Arbeit machen sollte.

Erläuterung:

  • -n 16 16 Byte Eingang zu verbrauchen (32 Hexadezimalzeichen = 16 Bytes).
  • 4/4 "%08X" viermal durchlaufen, 4 Bytes pro Iteration verbrauchen und den entsprechenden 32-Bit-Wert als 8 Hexadezimalziffern mit führenden Nullen drucken, falls erforderlich.
  • 1 "\n" mit einem einzigen Zeilenumbruch enden.
+1

Rechts. Und '% 08X' ist sogar noch besser, wenn genau 32 Hexadezimalziffern benötigt werden, wenn führende Nullen vorhanden sind. Ich habe meine Antwort entsprechend modifiziert. –

+0

Noch besser. Ich würde wieder upvoten, wenn ich könnte. – Biffen

+0

@Renauld_Pacalet Wie könnte ich das Gleiche machen und aus einem Python-Code ein 32-stelliges Hex erzeugen? Wenn ich es auf der Kommandozeile mache, funktioniert es schnell 1. Mal, danach dauert es aus irgendeinem Grund 30 Sekunden oder länger. –

4

gibt drei Möglichkeiten, die ich kenne:

#!/bin/bash 

n=16 

# Read n bytes from urandom (in hex): 
xxd -l "$n" -p     /dev/urandom | tr -d " \n" ; echo 
od -vN "$n" -An -tx1    /dev/urandom | tr -d " \n" ; echo 
hexdump -vn "$n" -e ' /1 "%02x"' /dev/urandom ; echo 

Verwenden Sie eine, die beiden anderen auf Kommentar.

+0

Meiner Erfahrung nach ist "Od" am häufigsten. MacOS hatte 'hexdump',' xdd' und 'od'. Git Bash (MinGW) hatte 'xxd' und' od'. Docker-Image basierend auf Alpine Linux hatte 'od' (und' tr' natürlich). Und alle drei Plattformen hatten '/ dev/urandom'. Also, wenn Sie nach dem tragbarsten suchen, dann bleiben Sie mit dem "Od" -Geschmack. –

Verwandte Themen