วิธีใช้ / dev / (u) สุ่ม


32

ฉันจะใช้/dev/(u)randomบน Ubuntu หรือระบบ * nix ใด ๆ ได้อย่างไร?

ฉันลองมัน แต่มันบอกว่าปฏิเสธการอนุญาต
หมายเหตุ: ฉันพยายามเป็นรูทด้วย

/dev/(u)random
sudo /dev/(u)random
sudo -s; /dev/(u)random

2
โปรดสังเกตว่าคำสั่งเหล่านี้ควรใช้เฉพาะเมื่อคุณต้องการข้อมูลแบบสุ่มคุณภาพสูงโดยทั่วไปเพื่อสร้างรหัสผ่านที่ดี มิฉะนั้นจะมีทางเลือกที่มีน้ำหนักเบามากขึ้นตัวอย่างเช่น 'ตัวแปร' ของสภาพแวดล้อมของเชลล์RANDOMเพื่อสร้างตัวเลขจำนวนเต็มบวกแบบสุ่ม: echo $RANDOMและโปรแกรมshufเพื่อสร้างการเรียงสับเปลี่ยนแบบสุ่มตัวอย่างเช่นเล่นตามลำดับแบบสุ่มจากเพลย์ลิสต์
sudodus

คำตอบ:


54

มันเป็นไฟล์อย่างอุปกรณ์ดังนั้นคุณสามารถทำสิ่งต่าง ๆ เช่น cat หรือคัดลอกจากมัน ตัวอย่างเช่น

dd if=/dev/urandom of=~/urandom_test count=4 bs=1024

สร้างไฟล์ที่มี 4K สุ่มไบต์

cat /dev/urandom > ~/urandom_test2 

จะยังคงเขียนไบต์แบบสุ่มไปยังไฟล์นั้นจนกว่าคุณจะกด Ctrl-C อย่าทำสิ่งนี้ในระบบที่มีประสิทธิภาพต่ำ ...

head -30 /dev/urandom > ~/urandom_test3

จะเขียนแบบสุ่ม 30 บรรทัด


1
รู้สึกฟรีเพื่อ upvote แล้ว!
aychedee

5
ฉันจะทำอย่างไรถ้าตัวแทนของฉัน> 15
Caner Korkmaz

1
หมายเหตุ: อย่าทำ cat / dev / urandom> ~ / urandom_test2 บนระบบที่มีประสิทธิภาพต่ำ -> ที่ค้างระบบ
Caner Korkmaz

1
.. ที่ขึ้นอยู่กับนิยามของเส้นตรง bytes terminated by a \nนิยามของฉันคือ ของคุณคืออะไร head -30 /dev/urandomจะให้ 30 บรรทัดสุ่มไบต์ ความยาวของเส้นเหล่านั้นจะถูกสุ่มอย่างแน่นอน ลองใช้wc -lไฟล์เอาต์พุตของคุณหากคุณไม่มั่นใจ
aychedee

3
โปรดทราบว่า/dev/urandomถูก จำกัด ไว้ที่ 32 เอ็มไอต่อread()และddจะไม่ลองใหม่อีกครั้งในการอ่านอีกครั้ง/dev/urandomอัตราผลตอบแทนผู้ที่ 32 เอ็มไอเพื่อให้คุณมีการโทรด้วยdd iflag=fullblockSee dd กำลังสร้างไฟล์สุ่ม 32 MB แทนที่จะเป็น 1 GB
Sergiy Kolodyazhnyy

14

รับไบต์แบบสุ่ม

หากคุณต้องการจำนวนสุ่มจำนวนหนึ่งอ่านจำนวนไบต์/dev/urandomนั้น
มันเป็น "ไฟล์พิเศษ" ที่ถูกทำให้เป็นเหมือนไฟล์เพื่ออ่านตัวเลขสุ่มจาก

การใช้catเพื่ออ่านจาก/dev/urandomเป็นความคิดที่ไม่ดีเพราะมันจะพยายามอ่าน/dev/urandomจนจบ - แต่มันก็ไม่จบ

headคุณสามารถใช้ แต่ระวังที่จะอ่านเป็นไบต์ไม่ใช่ทีละบรรทัด - เพราะว่าบรรทัดจะถูกแยกแบบสุ่มโดยการขึ้นบรรทัดใหม่แบบสุ่ม

ดังนั้นหากต้องการอ่าน 30 ไบต์แบบสุ่มลงในไฟล์random.bytesให้ใช้:

head -c 30 /dev/urandom > random.bytes

คุณสามารถอ่านได้จากมันในฐานะผู้ใช้ปกติ

ปล่อยให้อยู่คนเดียว / dev / สุ่ม

ปกติคุณต้องการที่จะใช้ไม่ได้ /dev/urandom/dev/random

ปัญหาคือ/dev/randomยากที่จะใช้ในทางที่ถูกต้อง - และใช้งานง่ายในทางที่ผิด การใช้มันผิดใช้งานได้ในตอนแรก แต่สร้างปัญหาประสิทธิภาพที่แปลก - แม้กระทั่งสุ่มในภายหลัง บางครั้ง

เมื่อคุณใช้/dev/urandomมันจะใช้/dev/randomภายในเป็นการดูแลส่วนที่ยุ่งยาก


4

หากคุณต้องการเพียงแค่อ่านด้วยตัวเลขที่รู้จักคุณสามารถทำได้

od -d /dev/random

0

ฉันใช้สิ่งนี้เป็นการส่วนตัวในการสร้างโทเค็น:

dd if=/dev/urandom  count=1 bs=128 | sha512sum
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.