עבור לתוכן

איך ניתן ליישם CryptGenRandom לייצירת מספרים רנדומלים חזקים?

Featured Replies

פורסם

שלום,

חזרתי לא מזמן למקורות- לC כדי לנסות למצוא פונקציה חזקה שמייצרת מספרים רנדומלים טובים.

לפי מה שהבנתי בC הפונקציה שמייצרת מספרים, RAND, מייצרת פסדו-רנדומליים קבועים בין 0 ל32767,

כאשר אני פשוט "דוגם" מספר מסדרה קבועה שרצה ולכל מספר הסתברות שווה להופיע.

אפילו אם אני עושה SEED עם SRAND עדיין המספרים לא כל כך טובים... :kopfpatsch:

גם random() בדומה לrand לא משהו בכלל...

אבל אז שמתי לב לפונקציה מעניינת בשם CryptGenRandom בספרייה Wincrypt.h שלפי מה שקראתי עליה ע"י ישום טוב שלה למקור רנדומלי CSP ניתן לייצר פונקציה חזקה למספרים רנדומליים..

יחד עם זאת יש עליה הרבה סימני שאלה שלא ממש הצלחתי להבין, כמו מה מקור האנטרופיה שלה...

מישהו פה פיתח משהו טוב עם הפונקציה הזאת למספרים רנדומליים? או יכול להסביר יותר טוב על יישומים אפשריים איתה?

תודה מראש. :-X

פורסם

תקן C לא מגדיר איך פונקצית rand עובדת. הרבה קומפיילרים ממשים את rand די גרוע (ובמקרה שאתה מתאר, כנראה גרוע במיוחד).

RAND_MAX יכול להיות הרבה יותר גדול מ-32767. כנראה שהקומפיילר שלך עובד עם LGC מפורסם שמחזיר 15 סיביות כל פעם, והוא די גרוע. אתה עובד עם VC6 במקרה?

בכל מקרה:

1) כל פלטפורמה יכולה לממש את rand בצורה אחרת.

2) רוב הפלטפורמות המודרניות מציעות ממשקים נוספים ליצור מספרים אקראיים, אשר אינם חלק מהסטנדרט של C אלא יחודיים לפלטפורמה. CryptGenRandom היא דוגמא אחת.

3) מס' שימושים לדוגמא למספרים "אקראיים" חזקים יותר: הצפנה, סימולציות (monte carlo), וסטטיסטיקה.

בתיאבון

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים