تولید رشته تصادفی در سی شارپ

تولید رشته تصادفی در سی شارپ
فهرست مقاله [نمایش]

    در برنامه‌نویسی سی‌شارپ، تولید رشته‌های تصادفی برای کاربردهای مختلف مثل رمز موقت، توکن احراز هویت، کد تأیید، نام فایل موقت و داده تست بسیار لازم است. اما اگر این رشته‌ها تکراری یا غیرایمن تولید شوند، ممکن است مشکل ایجاد کنند.

    تعریف رشته تصادفی

    رشته تصادفی یعنی متنی که از حروف، اعداد یا کاراکترهای خاص ساخته می‌شود و ترکیب آن قابل پیش‌بینی نیست.

    چرا تولید رشته تصادفی مهم است؟

    چند کاربرد رایج:

    ساخت پسورد یا OTP

    تولید Token برای API

    تولید نام فایل موقت

    داده تست در برنامه‌ها

    لینک‌های بازیابی رمز عبور


    2. کار با Random و محدودیت آن در ساخت رشته

    ساده‌ترین روش استفاده از کلاس Random در سی شارپ است، اما باید حواسمان باشد که تکراری بودن یا ضعف امنیتی ممکن است رخ دهد.

    مثال ساده از تولید رشته تصادفی با Random

    var rnd = new Random();
    string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    string result = new string(Enumerable.Repeat(chars, 8)
        .Select(s => s[rnd.Next(s.Length)]).ToArray());
    Console.WriteLine(result);
    

    این روش ساده است، اما امنیت خیلی بالایی ندارد و ممکن است در اجراهای پشت‌سرهم تکراری شود.


    3. روش اول: استفاده از Random همراه با کنترل طول و کاراکترها

    در این روش کاراکترهای مجاز را مشخص می‌کنیم و از Random برای انتخاب تصادفی استفاده می‌کنیم.

    مثال کاربردی

    string GetRandomString(int length)
    {
        var rnd = new Random();
        const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        return new string(Enumerable.Repeat(chars, length)
            .Select(s => s[rnd.Next(s.Length)]).ToArray());
    }
    
    Console.WriteLine(GetRandomString(10));
    

    مزایا و معایب

    مزایا: ساده و سریع برای موارد عادی

    معایب: امنیت پایین و احتمال تکرار


    4. روش دوم: استفاده از RNGCryptoServiceProvider یا RandomNumberGenerator

    این روش برای زمانی است که امنیت یا عدم پیش‌بینی اهمیت دارد.

    کد عملی

    using System.Security.Cryptography;
    
    string GetSecureRandomString(int length)
    {
        const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        var result = new char[length];
        using var rng = RandomNumberGenerator.Create();
        var buffer = new byte[4];
    
        for (int i = 0; i < length; i++)
        {
            rng.GetBytes(buffer);
            int num = BitConverter.ToInt32(buffer, 0);
            result[i] = chars[Math.Abs(num % chars.Length)];
        }
    
        return new string(result);
    }
    
    Console.WriteLine(GetSecureRandomString(12));
    

    موارد استفاده

    رمز عبور

    توکن لاگین

    لینک ریکاوری


    5. روش سوم: تولید GUID برای رشته منحصربه‌فرد

    GUID معمولاً تکراری نمی‌شود و برای ساخت رشته یونیک گزینه خوبی است.

    مثال 

    string guidString = Guid.NewGuid().ToString();
    Console.WriteLine(guidString);

    یا کوتاه‌شده:

    string shortGuid = Guid.NewGuid().ToString("N").Substring(0, 12);
    Console.WriteLine(shortGuid);

    کاربرد در پروژه‌ها

    ID کاربر

    Token دستگاه

    نام فایل


    6. روش چهارم: ترکیبی از زمان و تصادف

    string customId = DateTime.Now.Ticks.ToString("X") + "_" + Guid.NewGuid().ToString("N").Substring(0, 6);
    Console.WriteLine(customId);
    

    مناسب برای نام فایل یا داده‌های یونیک که امنیت خیلی بالا نیاز ندارند.


    7. مقایسه روش‌ها

    روشامنیتسرعتکاربردتوضیح
    Random سادهپایینبالاعمومیممکن است تکرار شود
    RNGCryptoبالامتوسطرمز، توکنامن و قابل اطمینان
    GUIDمتوسطبالاشناسه یونیکاحتمال تکرار بسیار کم
    زمان + GUIDمتوسطبالافایل و ID موقتساده و سریع

    8. نتیجه‌گیری

    انتخاب روش مناسب بستگی به هدفت دارد:

    اگر سادگی مهم است → Random

    اگر امنیت لازم است → RandomNumberGenerator

    اگر فقط یونیک بودن اهمیت دارد → GUID

    برای نام‌گذاری و داده موقت → ترکیبی از زمان و GUID

    در نهایت تعیین کن که تکرار نشدن، امنیت یا سرعت برایت مهم‌تر است و همان روش را انتخاب کن!

    اطلاعات نویسنده
    • نویسنده: تیم تحریریه باگتو

    ارسال دیدگاه

    برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربری‌تان شوید


    دیدگاه کاربران

    آموزش پیشنهادی باگتو


    course image

    ستارگان سی شارپ

    9,900,000 تومان

    3,960,000 تومان


    اطلاعات بیشتر

    course image

    آموزش سی شارپ - سطح متوسط

    1,490,000 تومان

    477,000 تومان


    اطلاعات بیشتر

    }