Nasıl /dev/random'u kullanın veya C urandom için?
C. /dev/random
/dev/urandom
kullanmak istiyorum bunu Nasıl yapabilirim? Nasıl biri olursa lütfen söyleyin bilen varsa C bunları işlemek, nasıl yapabilirim bilmiyorum. Teşekkür ederim.
CEVAP
EDİTEğer arc4random
sisteminizde mevcut ise, arc4random_buf
yerine kullanmak isteyebilirsiniz. Kendi numaralarını şifreli-güvenli, jeneratör hızlı aptalca ve arabaşarısız olamaz. Bu açık farkla en iyi yolu oluşturmak için rastgele sayılar platformlarda destek (BSD sistemleri de dahil olmak üzere OS X/iOS, Android, programlar bu linki karşı LibreSSL, ama çok erken 2015, oldukça büyük değil Linux).
char myRandomData[50];
arc4random_buf(myRandomData, sizeof myRandomData);
Eğer arc4random
ve türevleri sisteminizde mevcut değilse, eğer dosyalar gibi rastgele cihazları kullanabilirsiniz. Onlardan okuduğun ve rastgele veri almak. Buradaopen
/read
kullanıyorum, ama fopen
/fread
sadece iyi çalışmaya devam eder.
int randomData = open("/dev/random", O_RDONLY);
char myRandomData[50];
size_t randomDataLen = 0;
while (randomDataLen < sizeof myRandomData)
{
ssize_t result = read(randomData, myRandomData randomDataLen, (sizeof myRandomData) - randomDataLen);
if (result < 0)
{
// error, unable to read /dev/random
}
randomDataLen = result;
}
close(randomData);
/dev/random
sonunda tükeneceği rağmen dosya tanımlayıcısı kapatmadan önce daha birçok rasgele bayt okuyabilirsiniz. Bir kez o does, okuma işlemi iptal edilecek ve read
kaç bayt başarıyla okundu nasıl geri dönecek. /dev/urandom
asla blok ya da tüketiyor. (/dev/urandom
da her zaman okumak çevresine ihtiyacın olmazdı yani istediğin bayt sayısını verecektir.)
/dev/random
/dev/urandom
arasında fark /dev/random
çevresel gürültü aygıt sürücüleri rasgele sayılar oluşturmak için bir araya kullanmasıdır. /dev/urandom
rasgele bir sayı verirtabanlıayrıca, entropi bit /dev/random
mevcut olduğunda örtbas etmek için arkasındaki bölgede de yapalım bir algoritması vardır ama /dev/random
. Hala şifreli olarak güvenli kabul ediliyor ve genel olarak /dev/random
daha kullanmak için iyi bir fikirdir.