2015-12-17 14 views
9

32 onaltılı basamaktan oluşan bir dize basacak bir komut koymak istiyorum. Ihtiyacım olanı hangisiKomut satırı üzerinden rasgele bir 32 onaltılık basamak nasıl alınır?

6EF6B30F9E557F948C402C89002C7C8A 

:

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

Bu gibi çıktı oluşturur: Ben çalışan bir Python senaryo var. böylece (ı daha sofistike betik dilleri yakut ve piton erişimi yok Ancak

uuidgen | tr -d '-' 

ve bir Mac üzerinde olmayacak:

Mac'te, ben bile bunu yapabilirsiniz uuidgen yok). Sınırlı bir platformda olduğum için, sed, awk,/dev/random gibi daha bash'ish araçlarıyla uğraşmam gerek. Bunu yapmanın bir yolu var mı?

+2

'kafa -c16 Biffen

cevap

21

sonra hexdump varsa:

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

iş yapmak gerekir.

Açıklama:

  • -n 16 giriş (32 basamaklı hex = 16 bayt) 16 bayt tüketmek.
  • 4/4 "%08X"4 dört kez yineleme, yineleme başına 4 bayt tüketir ve gerekiyorsa, karşılık gelen 32 bit değerini 8 hex basamak olarak basar. Tek bir yeni satır ile sonlandırmak için
  • 1 "\n". Bildiğim
+1

Sağ. Önde gelen sıfırlar olduğunda tam olarak 32 hex rakamı gerekiyorsa '% 08X' daha da iyidir. Cevabımı buna göre değiştirdim. –

+0

Daha da iyisi. Yapabilseydim tekrar verirdim. – Biffen

+0

@Renauld_Pacalet Aynı şeyi nasıl yapabilirim ve böyle bir python kodundan 32 basamaklı bir hex üretebilirim. Komut satırında yaptığım zaman, ilk kez hızlı çalışır, bundan sonra bir sebepten 30 saniye veya daha uzun sürer. –

4

Orada üç yolu:

#!/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 

Kullanım biri, diğer ikisini açýklama.

+0

Benim deneyimime göre 'od' en yaygın olanıdır. MacOS 'hexdump', xdd' ve' od' vardı. Git Bash (MinGW) 'xxd' ve' od' vardı. Alpine Linux'a dayalı Docker görüntüsü 'od' (ve tabii ki tr) idi. Ve her üç platformda da/dev/urandom vardı. Yani eğer en portatif arıyorsanız, o zaman od odunu ile yapışırsınız. –

İlgili konular