2015-12-17 23 views
9

32桁の16進数の文字列を出力するコマンドをまとめたいと思います。私は働くPythonスクリプトを持っている:コマンドラインから32桁の16進数字のランダムな文字列を取得する方法は?

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

これは、のような出力を生成:私は必要なものである

6EF6B30F9E557F948C402C89002C7C8A 

を。 Macの

、私もこれを行うことができますので、(

uuidgen | tr -d '-' 

しかし、私はより洗練されたスクリプト言語のRubyやPythonのへのアクセスを持っていない、と私はMac上ではありませんがuuidgenなし)。私は限られたプラットフォームにいるので、sed、awk、/ dev/randomのようなより多くのbash'ishツールを使う必要があります。これを行う方法はありますか?

+2

'head -c16 Biffen

答えて

21

あなたがhexdumpをお持ちの場合:

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

が仕事をする必要があります。

説明:

  • -n 16入力の16バイト(= 16バイトの32進数字)を消費します。
  • 4/4 "%08X" 4回反復するには、反復ごとに4バイトを消費し、必要に応じて先行ゼロを付けて、対応する32ビット値を8桁の16進数として出力します。
  • 1 "\n" 1つの改行で終了します。そこ
+1

右。そして、 '%08X'は、先行ゼロがあるときに正確に32桁の16進数が必要な場合にはさらに優れています。それに応じて私の答えを変更しました。 –

+0

さらに優れています。もし私ができるなら、私はもう一度upvoteしたいと思います。 – Biffen

+0

@Renauld_Pacaletどうすれば同じことができ、このような32桁の16進数をPythonコードから生成できますか?私はコマンドラインでそれを行うとき、それは最初に高速で動作し、その後は何らかの理由で30秒以上かかる。 –

4

私の知っている三つの方法:

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

いずれかを使用し、他の二つをコメントアウト。

+0

私の経験では 'od'が最も一般的です。 MacOSは 'hexdump'、' xdd'、 'od'を持っていました。 Git Bash(MinGW)は 'xxd'と' od'を持っていました。 Alpine Linuxをベースにしたドッカー画像には 'od'(もちろん' tr')がありました。 3つのプラットフォームにはすべて '/ dev/urandom'があります。だからあなたが最も持ち運び可能なものを探しているならば、 'od'フレーバーで固執してください。 –

関連する問題