read /dev/urandom 3
Di atas tidak berfungsi .. Bagaimana saya bisa membaca byte acak dari /dev/urandom
dalam bash?
read /dev/urandom 3
Di atas tidak berfungsi .. Bagaimana saya bisa membaca byte acak dari /dev/urandom
dalam bash?
random="$(dd if=/dev/urandom bs=3 count=1)"
$()
kerjanya?It treats the output of a command like a variable.
sebenarnya maksudmu string, kan?$()
cukup universal, tidak spesifik untuk bash. BTW, hati-hati Anda tidak mengalami keterbatasan pada karakter apa shell dapat menyimpan dalam variabel - misalnya, versi bash yang saya uji dengan meninggalkan nol (\ x00) dari string.(Jika Anda ingin karakter tanda hubung literal, karakter tanda hubung harus berada di akhir string seperti yang dilakukan di atas, sebagai lawan dari
*-_
).Dan untuk menjelaskan apa yang dilakukan karena set perintah di atas:
head -c 500 /dev/urandom
: Dapatkan 500 karakter (byte) pertama dari/dev/urandom
.tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: Hapus semua kecuali karakter yang ditentukan'a-zA-Z0-9~!@#$%^&*_-'
dari output perintah pertama.fold -w 3
: Format output dari perintah kedua sehingga memiliki 3 karakter per baris.head -n 1
: Tampilkan baris pertama hasil dari perintah ketiga aktifstdout
.sumber
fold -w 3 | head -n 1
denganhead -c 3
jika baris char baru tidak diperlukan di akhir.Illegal byte sequence
kesalahan. Untuk memperbaikinya, gunakan pengkodean "C"; ubah perintah ke:head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
Silakan periksa
man od
.Anda bisa menggunakan, misalnya
od -vAn -N4 -tu4 < /dev/urandom
untuk menghasilkan angka acak desimal 4 byte tak bertanda.
sumber
Inilah salah satu yang membuat string base64, perhatikan bahwa meskipun mereka terbatas pada string base64, padding dihapus dari mereka, sehingga Anda tidak dapat mendekode mereka, Anda mungkin tidak akan memerlukannya juga.
Ganti
5
dengan jumlah karakter yang Anda inginkan.Namun, jika Anda perlu men-decode mereka untuk beberapa alasan, pindah
base64
ke ujung pipa. Kemudian akan mengumpulkan 5 karakter dari urandom dan base64 menyandikannya dengan bantalan yang tepat, tetapi string terakhir mungkin lebih panjang dari apa yang Anda inginkan karena bantalan.sumber
cat
akan membaca jauh lebih dari jumlahN
karakter yang diberikan , dan dapat menghabiskan entropi. Bukan jawaban yang berguna.cat
karena keduanyabase64
danhead
dapat mengambil nama file sebagai argumen, dalam hal ini berfungsi dan tidak boleh menguras entropi. Lihat stackoverflow.com/questions/10031344/...Coba ini:
dd if=/dev/urandom bs=1 count=3
Jika Anda ingin memasukkan hasilnya dalam $ variabel:
Perhatikan bahwa itu mungkin tidak akan dicetak.
sumber
Solusi termudah akan sesederhana:
sumber