র্যান্ডম পাসওয়ার্ড তৈরি করা হচ্ছে


229

আমাদের সাইটে যখন কোনও ব্যবহারকারী তার পাসওয়ার্ড হারিয়ে ফেলে এবং হারানো পাসওয়ার্ড পৃষ্ঠাতে চলে যায় তখন আমাদের তাকে একটি নতুন অস্থায়ী পাসওয়ার্ড দেওয়া দরকার। এটি কতটা এলোমেলো, আমি সত্যিই তাতে আপত্তি করি না বা এটি যদি "প্রয়োজনীয়" শক্তিশালী পাসওয়ার্ডের সমস্ত নিয়মের সাথে মেলে তবে আমি যা করতে চাই তা হ'ল তাদের একটি পাসওয়ার্ড দেওয়া যাতে তারা পরে পরিবর্তন করতে পারে।

অ্যাপ্লিকেশনটি সি # তে লিখিত একটি ওয়েব অ্যাপ্লিকেশন। তাই আমি একজন গড়পড়তা এবং গাইডের অংশটি ব্যবহারের সহজ পথে যাওয়ার কথা ভাবছিলাম। অর্থাত

Guid.NewGuid().ToString("d").Substring(1,8)

Suggesstions? চিন্তা ভাবনা আছে?


12
এখানে কয়েকটি ভাল সমাধান, তবে একটি সামান্য পরামর্শ: এই অক্ষরগুলির একটিতে থাকা পাসওয়ার্ড তৈরি করবেন না: Oo0Ili (আপনি দেখুন কেন) :)
stian.net

2
আমি একটি উত্তর যুক্ত করেছি যা একটি পাসওয়ার্ড জেনারেটর হিসাবে কেপাস ব্যবহার করে এবং উদ্ভাসিত অনেকগুলি বিকল্পের মধ্যে আমি @ স্টিইন ডট নেট দ্বারা বর্ণিত অনুরূপ বর্ণগুলি বাদ দেওয়ার বিকল্পটিও অন্তর্ভুক্ত করেছি।
পিটার

উত্তর:


570

7
ফ্রেমওয়ার্কের এমন পদ্ধতি আছে তা জানেন না! অসাধারণ! এটির জন্য আমার বর্তমান কোডটি বদলাবে!
ফ্রিহার্ড

35
আমার নিজের পিডব্লিউ জেন কোডটি নিখুঁত করার জন্য প্রায় এক দিন ব্যয় করার পরে আমি এটি পেয়েছি। আমি কেমন অনুভব করেছি তা চিত্র;)
রিক

16
এএএএআইএকি এই পদ্ধতিটি ডোমেনে কোনও পাসওয়ার্ড নীতিমালাকে মেনে চলার পাসওয়ার্ড তৈরি করে না তাই এটি প্রতিটি ব্যবহারের জন্য উপযুক্ত নয়।
teebot

19
এই সমাধানটির মূল সমস্যাটি হ'ল আপনি চরিত্রের সেটটি নিয়ন্ত্রণ করতে পারবেন না, সুতরাং আপনি চাক্ষুষভাবে অস্পষ্ট বর্ণগুলি (0oOl1i! |) নির্মূল করতে পারবেন না যা অনুশীলনে সত্যই গুরুত্বপূর্ণ।
ডেভিড হ্যামন্ড

19
কিছু জন্য ASP.NET Core?
শাশ্বত

113
public string CreatePassword(int length)
{
        const string valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        StringBuilder res = new StringBuilder();
        Random rnd = new Random();
        while (0 < length--)
        {
            res.Append(valid[rnd.Next(valid.Length)]);
        }
        return res.ToString();
}

উত্পাদিত পাসওয়ার্ডের জন্য উপলব্ধ অক্ষরের তালিকা থেকে চয়ন করতে সক্ষম হওয়ার এটির একটি ভাল সুবিধা রয়েছে (উদাহরণস্বরূপ কেবলমাত্র অঙ্কগুলি, কেবলমাত্র বড় হাতের অক্ষর বা কেবল ছোট হাতের অক্ষর ইত্যাদি))


2
এই পদ্ধতিটি (বেস 62) শক্তিতে জিইউইডি (বেস 16) এর চেয়েও উন্নত: একটি 8-চর হেক্স স্ট্রিং 4-5 চর অক্ষরের সমতুল্য
জিমি

57
Randomক্রিপ্টোগ্রাফিকভাবে নিরাপদ নয়; System.Security.Cryptography.RNGCryptoServiceProviderএকটি ভাল পছন্দ।
anaximander

3
র্যান্ডম ক্লাসটি প্রতিবার ইনস্ট্যান্ট করা হওয়ার সাথে সাথে প্রতিটি পদ্ধতিটি বলা হওয়ার সাথে সাথে এটি একই পাসওয়ার্ড তৈরি করবে। এটিকে র্যান্ডমকে এই পদ্ধতি থেকে সরিয়ে এবং দৃষ্টান্তটি পুনরায় ব্যবহার করে সুরক্ষিত করা যায় could
জন 19

6
না, এটা হবে না। দু'জন লোক যদি একই ঘড়ির সময় পাসওয়ার্ড পরিবর্তন করার সিদ্ধান্ত না নেয়।
Radu094

10
প্রশ্ন থেকে উদ্ধৃতি: যত্ন নেবেন না যদি এটি "প্রয়োজনীয়" শক্তিশালী পাসওয়ার্ডের সমস্ত নিয়মের সাথে মেলে ... ... যদিও এই উত্তরটি ডাউনভোট করার জন্য ধন্যবাদ
Radu094

35

আমার কোডের প্রধান লক্ষ্যগুলি হ'ল:

  1. স্ট্রিংগুলির বিতরণ প্রায় অভিন্ন (ছোট আকারের বিচ্যুতির বিষয়ে চিন্তা করবেন না)
  2. এটি প্রতিটি আর্গুমেন্ট সেটের জন্য কয়েক বিলিয়ন স্ট্রিং আউটপুট দেয়। যদি আপনার পিআরএনজি কেবল 2 বিলিয়ন (এনট্রপির 31 বিট) বিভিন্ন মান উত্পন্ন করে তবে একটি 8 টি অক্ষরের স্ট্রিং (ent 47 বিট ইন্ট্রপির) উত্পাদন করা অর্থহীন।
  3. এটি সুরক্ষিত, যেহেতু আমি লোকেরা পাসওয়ার্ড বা অন্যান্য সুরক্ষা টোকেনের জন্য এটি ব্যবহার করবে বলে আমি প্রত্যাশা করি।

প্রথম সম্পত্তিটি বর্ণমালার আকারে bit৪ বিট মানের মডুলোর মাধ্যমে অর্জন করা হয়। ছোট বর্ণমালার জন্য (যেমন প্রশ্ন থেকে characters২ টি অক্ষর) এটি নগণ্য পক্ষপাতিত্বের দিকে পরিচালিত করে। দ্বিতীয় এবং তৃতীয় সম্পত্তি RNGCryptoServiceProviderপরিবর্তে ব্যবহার করে অর্জন করা হয় System.Random

using System;
using System.Security.Cryptography;

public static string GetRandomAlphanumericString(int length)
{
    const string alphanumericCharacters =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
        "abcdefghijklmnopqrstuvwxyz" +
        "0123456789";
    return GetRandomString(length, alphanumericCharacters);
}

public static string GetRandomString(int length, IEnumerable<char> characterSet)
{
    if (length < 0)
        throw new ArgumentException("length must not be negative", "length");
    if (length > int.MaxValue / 8) // 250 million chars ought to be enough for anybody
        throw new ArgumentException("length is too big", "length");
    if (characterSet == null)
        throw new ArgumentNullException("characterSet");
    var characterArray = characterSet.Distinct().ToArray();
    if (characterArray.Length == 0)
        throw new ArgumentException("characterSet must not be empty", "characterSet");

    var bytes = new byte[length * 8];
    new RNGCryptoServiceProvider().GetBytes(bytes);
    var result = new char[length];
    for (int i = 0; i < length; i++)
    {
        ulong value = BitConverter.ToUInt64(bytes, i * 8);
        result[i] = characterArray[value % (uint)characterArray.Length];
    }
    return new string(result);
}

(এটি আমি কীভাবে র্যান্ডম 8 টি অক্ষর, সি # তে বর্ণানুক্রমিক স্ট্রিং তৈরি করতে পারি তার উত্তরটির একটি অনুলিপি ? )


1
যদি UInt64.MaxValue অক্ষরআরএ দ্বারা সমানভাবে বিভাজ্য না হয় en
জেফ ওয়াকার কোড রেঞ্জার

1
@ জেফওয়ালকারকোডেঞ্জার এই কারণেই আমি বলেছিলাম नगনীয় পক্ষপাতিত্ব, কোনও পক্ষপাত নয়। এমনকি আউটপুট পেটবাইটের সাথে আপনার একে একে নিখুঁত নিরপেক্ষ স্ট্রিং জেনারেটর থেকে আলাদা করতে 1% কম। নিখুঁত আনবাইজিংয়ের অতিরিক্ত জটিলতা স্পষ্টতই এলোমেলোভাবে তাত্ত্বিক লাভের পক্ষে উপযুক্ত নয়।
কোডসইনচাউস

9
। নেট কোর ব্যবহারকারীদের জন্য, "নতুন আরএনজিক্রিপ্টোসোসাইভারপ্রোভাডার ()। গেটবাইটস (বাইটস) প্রতিস্থাপন করুন;" "সিস্টেম.সিকিউরিটি.ক্রিপ্টোগ্রাফি.র্যান্ডম নাম্বার জেনারেটর.ক্রিয়েট ()। গেটবাইটস (বাইটস);"
এনপিনেলসন

24
public string GenerateToken(int length)
{
    using (RNGCryptoServiceProvider cryptRNG = new RNGCryptoServiceProvider())
    {
        byte[] tokenBuffer = new byte[length];
        cryptRNG.GetBytes(tokenBuffer);
        return Convert.ToBase64String(tokenBuffer);
    }
}

( RNGCryptoServiceProviderবারবার তাত্ক্ষণিক এড়ানোর জন্য আপনার ক্লাসটিও থাকতে পারে যেখানে এই পদ্ধতিটি অদৃশ্যযোগ্য প্রয়োগ করে, একটি রেফারেন্স ধরে রাখে এবং এটি সঠিকভাবে নিষ্পত্তি করতে পারে))

এটি লক্ষ্য করা গেছে যে এটি কোনও বেস -৪ string স্ট্রিংটি দেয়, আউটপুট দৈর্ঘ্য সর্বদা 4 এর একাধিক, অতিরিক্ত স্থান =প্যাডিং চরিত্র হিসাবে ব্যবহার করে । lengthপরামিতি বাইট বাফার না আউটপুট স্ট্রিং এর দৈর্ঘ্য নির্দিষ্ট করে (এবং সম্ভবত যে পরামিতি জন্য শ্রেষ্ঠ নাম নয়, এখন আমি এটা সম্পর্কে চিন্তা)। এটি পাসওয়ার্ডের এনট্রপির কতগুলি বাইট থাকবে তা নিয়ন্ত্রণ করে। তবে, বেস -৪৪ প্রতি 3 বাইট ইনপুট এনকোড করতে 4-বর্ণের ব্লক ব্যবহার করে, আপনি যদি 3 এর একাধিক নয় এমন দৈর্ঘ্যের জন্য জিজ্ঞাসা করেন তবে কিছু অতিরিক্ত "স্পেস" থাকবে এবং এটি ব্যবহার করবে= পূরণ করতে করবে অতিরিক্ত।

আপনি যদি কোনও কারণে বেস -৪৪ স্ট্রিং ব্যবহার করতে পছন্দ না করেন তবে আপনি Convert.ToBase64String()কলটি নিয়মিত স্ট্রিংয়ে রূপান্তর করে বা কোনও Encodingপদ্ধতির সাথে প্রতিস্থাপন করতে পারেন ; যেমন। Encoding.UTF8.GetString(tokenBuffer)- কেবল নিশ্চিত হয়ে নিন যে আপনি এমন একটি অক্ষর সেট বেছে নিয়েছেন যা আরএনজি থেকে আগত মানগুলির পুরো পরিসীমা উপস্থাপন করতে পারে এবং এটি এমন অক্ষর তৈরি করে যা আপনি যেখানে পাঠাচ্ছেন বা সংরক্ষণ করছেন সেখানে তার সাথে সামঞ্জস্যপূর্ণ। উদাহরণস্বরূপ, ইউনিকোড ব্যবহার করে প্রচুর চাইনিজ অক্ষর দেওয়া যায়। বেস -৪৪ ব্যবহার করে বিস্তৃতভাবে সামঞ্জস্যপূর্ণ অক্ষরের সেট গ্যারান্টিযুক্ত হয় এবং যতক্ষণ আপনি একটি শালীন হ্যাশিং অ্যালগরিদম ব্যবহার করেন ততক্ষণ এই জাতীয় স্ট্রিংয়ের বৈশিষ্ট্যগুলি এটিকে কম সুরক্ষিত করে তোলে না।


আমার মনে হয় আপনি যেখানে লিংক বুফ রেখেছেন সেখানে টোকনফুফার রেখেছেন।
পিন্ট্যাগ

আমি যখন এই কোডটি ব্যবহার করি এবং 10 এর দৈর্ঘ্যে পাস করি, তখন ফিরে আসা স্ট্রিংটি সর্বদা 16 অক্ষর দীর্ঘ এবং চূড়ান্ত 2 টি অক্ষর সর্বদা "==" থাকে। আমি কি এটি ভুলভাবে ব্যবহার করছি? দৈর্ঘ্য হেক্সে নির্দিষ্ট করা আছে?
পিন্ট্যাগ

1
নির্দিষ্ট দৈর্ঘ্যটি এলোমেলোভাবে বাইটের সংখ্যা (বা "এন্ট্রপি", কারণ এটি প্রযুক্তিগতভাবে পরিচিত)। যাইহোক, প্রত্যাবর্তিত মানটি বেস -৪৪ এনকোডযুক্ত, যার অর্থ বেস -৪৪ এনকোডিং কীভাবে কাজ করে তার ফলে আউটপুট দৈর্ঘ্য সর্বদা ৪ এর একাধিক হয়, কখনও কখনও এটি সমস্ত অক্ষরকে এনকোড করার প্রয়োজনের চেয়ে বেশি অক্ষর, তাই এটি ব্যবহার করে = অক্ষর বাকি প্যাড।
anaximander

1
আরএনজিক্রিপ্টো সার্ভিসপ্রোভাডার একটি আইডিজিপোজেবল, তাই আমি এটি ব্যবহারের প্যাটার্ন দিয়ে প্রয়োগ করবো (অর্থাত্‍ (var cryptRNG = new RNGCryptoServiceProvider ()) {...}) ব্যবহার করুন
ক্লোরুবেক

@ kloarubeek একটি বৈধ পয়েন্ট, এবং একটি ভাল পরামর্শ। আমি আমার কোডের নমুনাতে এটি যুক্ত করেছি।
anaximander

20

এটি অনেক বড়, তবে আমি মনে করি এটি আরও খানিকটা বিস্তৃত দেখায়: http://www.obviex.com / নমুনা / পাসওয়ার্ড.এএসপিএক্স

///////////////////////////////////////////////////////////////////////////////
// SAMPLE: Generates random password, which complies with the strong password
//         rules and does not contain ambiguous characters.
//
// To run this sample, create a new Visual C# project using the Console
// Application template and replace the contents of the Class1.cs file with
// the code below.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,
// EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
// 
// Copyright (C) 2004 Obviex(TM). All rights reserved.
// 
using System;
using System.Security.Cryptography;

/// <summary>
/// This class can generate random passwords, which do not include ambiguous 
/// characters, such as I, l, and 1. The generated password will be made of
/// 7-bit ASCII symbols. Every four characters will include one lower case
/// character, one upper case character, one number, and one special symbol
/// (such as '%') in a random order. The password will always start with an
/// alpha-numeric character; it will not start with a special symbol (we do
/// this because some back-end systems do not like certain special
/// characters in the first position).
/// </summary>
public class RandomPassword
{
    // Define default min and max password lengths.
    private static int DEFAULT_MIN_PASSWORD_LENGTH  = 8;
    private static int DEFAULT_MAX_PASSWORD_LENGTH  = 10;

    // Define supported password characters divided into groups.
    // You can add (or remove) characters to (from) these groups.
    private static string PASSWORD_CHARS_LCASE  = "abcdefgijkmnopqrstwxyz";
    private static string PASSWORD_CHARS_UCASE  = "ABCDEFGHJKLMNPQRSTWXYZ";
    private static string PASSWORD_CHARS_NUMERIC= "23456789";
    private static string PASSWORD_CHARS_SPECIAL= "*$-+?_&=!%{}/";

    /// <summary>
    /// Generates a random password.
    /// </summary>
    /// <returns>
    /// Randomly generated password.
    /// </returns>
    /// <remarks>
    /// The length of the generated password will be determined at
    /// random. It will be no shorter than the minimum default and
    /// no longer than maximum default.
    /// </remarks>
    public static string Generate()
    {
        return Generate(DEFAULT_MIN_PASSWORD_LENGTH, 
                        DEFAULT_MAX_PASSWORD_LENGTH);
    }

    /// <summary>
    /// Generates a random password of the exact length.
    /// </summary>
    /// <param name="length">
    /// Exact password length.
    /// </param>
    /// <returns>
    /// Randomly generated password.
    /// </returns>
    public static string Generate(int length)
    {
        return Generate(length, length);
    }

    /// <summary>
    /// Generates a random password.
    /// </summary>
    /// <param name="minLength">
    /// Minimum password length.
    /// </param>
    /// <param name="maxLength">
    /// Maximum password length.
    /// </param>
    /// <returns>
    /// Randomly generated password.
    /// </returns>
    /// <remarks>
    /// The length of the generated password will be determined at
    /// random and it will fall with the range determined by the
    /// function parameters.
    /// </remarks>
    public static string Generate(int   minLength,
                                  int   maxLength)
    {
        // Make sure that input parameters are valid.
        if (minLength <= 0 || maxLength <= 0 || minLength > maxLength)
            return null;

        // Create a local array containing supported password characters
        // grouped by types. You can remove character groups from this
        // array, but doing so will weaken the password strength.
        char[][] charGroups = new char[][] 
        {
            PASSWORD_CHARS_LCASE.ToCharArray(),
            PASSWORD_CHARS_UCASE.ToCharArray(),
            PASSWORD_CHARS_NUMERIC.ToCharArray(),
            PASSWORD_CHARS_SPECIAL.ToCharArray()
        };

        // Use this array to track the number of unused characters in each
        // character group.
        int[] charsLeftInGroup = new int[charGroups.Length];

        // Initially, all characters in each group are not used.
        for (int i=0; i<charsLeftInGroup.Length; i++)
            charsLeftInGroup[i] = charGroups[i].Length;

        // Use this array to track (iterate through) unused character groups.
        int[] leftGroupsOrder = new int[charGroups.Length];

        // Initially, all character groups are not used.
        for (int i=0; i<leftGroupsOrder.Length; i++)
            leftGroupsOrder[i] = i;

        // Because we cannot use the default randomizer, which is based on the
        // current time (it will produce the same "random" number within a
        // second), we will use a random number generator to seed the
        // randomizer.

        // Use a 4-byte array to fill it with random bytes and convert it then
        // to an integer value.
        byte[] randomBytes = new byte[4];

        // Generate 4 random bytes.
        RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
        rng.GetBytes(randomBytes);

        // Convert 4 bytes into a 32-bit integer value.
        int seed = BitConverter.ToInt32(randomBytes, 0);

        // Now, this is real randomization.
        Random  random  = new Random(seed);

        // This array will hold password characters.
        char[] password = null;

        // Allocate appropriate memory for the password.
        if (minLength < maxLength)
            password = new char[random.Next(minLength, maxLength+1)];
        else
            password = new char[minLength];

        // Index of the next character to be added to password.
        int nextCharIdx;

        // Index of the next character group to be processed.
        int nextGroupIdx;

        // Index which will be used to track not processed character groups.
        int nextLeftGroupsOrderIdx;

        // Index of the last non-processed character in a group.
        int lastCharIdx;

        // Index of the last non-processed group.
        int lastLeftGroupsOrderIdx = leftGroupsOrder.Length - 1;

        // Generate password characters one at a time.
        for (int i=0; i<password.Length; i++)
        {
            // If only one character group remained unprocessed, process it;
            // otherwise, pick a random character group from the unprocessed
            // group list. To allow a special character to appear in the
            // first position, increment the second parameter of the Next
            // function call by one, i.e. lastLeftGroupsOrderIdx + 1.
            if (lastLeftGroupsOrderIdx == 0)
                nextLeftGroupsOrderIdx = 0;
            else
                nextLeftGroupsOrderIdx = random.Next(0, 
                                                     lastLeftGroupsOrderIdx);

            // Get the actual index of the character group, from which we will
            // pick the next character.
            nextGroupIdx = leftGroupsOrder[nextLeftGroupsOrderIdx];

            // Get the index of the last unprocessed characters in this group.
            lastCharIdx = charsLeftInGroup[nextGroupIdx] - 1;

            // If only one unprocessed character is left, pick it; otherwise,
            // get a random character from the unused character list.
            if (lastCharIdx == 0)
                nextCharIdx = 0;
            else
                nextCharIdx = random.Next(0, lastCharIdx+1);

            // Add this character to the password.
            password[i] = charGroups[nextGroupIdx][nextCharIdx];

            // If we processed the last character in this group, start over.
            if (lastCharIdx == 0)
                charsLeftInGroup[nextGroupIdx] = 
                                          charGroups[nextGroupIdx].Length;
            // There are more unprocessed characters left.
            else
            {
                // Swap processed character with the last unprocessed character
                // so that we don't pick it until we process all characters in
                // this group.
                if (lastCharIdx != nextCharIdx)
                {
                    char temp = charGroups[nextGroupIdx][lastCharIdx];
                    charGroups[nextGroupIdx][lastCharIdx] = 
                                charGroups[nextGroupIdx][nextCharIdx];
                    charGroups[nextGroupIdx][nextCharIdx] = temp;
                }
                // Decrement the number of unprocessed characters in
                // this group.
                charsLeftInGroup[nextGroupIdx]--;
            }

            // If we processed the last group, start all over.
            if (lastLeftGroupsOrderIdx == 0)
                lastLeftGroupsOrderIdx = leftGroupsOrder.Length - 1;
            // There are more unprocessed groups left.
            else
            {
                // Swap processed group with the last unprocessed group
                // so that we don't pick it until we process all groups.
                if (lastLeftGroupsOrderIdx != nextLeftGroupsOrderIdx)
                {
                    int temp = leftGroupsOrder[lastLeftGroupsOrderIdx];
                    leftGroupsOrder[lastLeftGroupsOrderIdx] = 
                                leftGroupsOrder[nextLeftGroupsOrderIdx];
                    leftGroupsOrder[nextLeftGroupsOrderIdx] = temp;
                }
                // Decrement the number of unprocessed groups.
                lastLeftGroupsOrderIdx--;
            }
        }

        // Convert password characters into a string and return the result.
        return new string(password);
     }
}

/// <summary>
/// Illustrates the use of the RandomPassword class.
/// </summary>
public class RandomPasswordTest
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        // Print 100 randomly generated passwords (8-to-10 char long).
        for (int i=0; i<100; i++)
            Console.WriteLine(RandomPassword.Generate(8, 10));
    }
}
//
// END OF FILE
///////////////////////////////////////////////////////////////////////////////

2
দেখা যাচ্ছে যে ফ্রেমওয়ার্কের দ্বারা এটির জন্য সমর্থন রয়েছে। সুতরাং আমি বরং উত্তরটি গ্রহণ করছি!
ফ্রিহার্ড

1
দীর্ঘ আউটপুট মাপের সাথে শুধুমাত্র 2 ^ 31 টি আলাদা পাসওয়ার্ড তৈরি করা নীচের দিকে কিছুটা। অনলাইন আক্রমণগুলির বিরুদ্ধে যথেষ্ট হতে পারে তবে অফলাইনে আক্রমণে অবশ্যই তা সামান্য। => আমি এটি সুপারিশ করব না।
কোডসইনচাউস

এটি এখনও একটি ভাল উত্তর কারণ "বিল্ট-ইন" সমর্থনটি সত্যই সদস্যতা এবং আপনি যদি এএসপি.নেট সদস্যতা না ব্যবহারের সিদ্ধান্ত নিয়েছেন তবে কী হবে? এটি এখনও কাজ করে, যেহেতু নির্ভরতা সিস্টেম.ডাব্লু.ডিল, তবে এটি কিছুটা বিশ্রী কারণ পদ্ধতিটি স্বয়ংসম্পূর্ণ নয়। @ জিওচেট: এই বিকল্পটি পোস্ট করার জন্য ধন্যবাদ।
ক্রিস গোমেজ

8

আমি জানি যে এটি একটি পুরানো থ্রেড, তবে আমার কাছে এমনটি আছে যা কারওর ব্যবহারের পক্ষে মোটামুটি সহজ সমাধান হতে পারে। কার্যকর করা সহজ, বোঝা সহজ এবং বৈধতা যাচাই করা সহজ।

নিম্নলিখিত প্রয়োজনীয়তা বিবেচনা করুন:

উত্পন্ন করার জন্য আমার একটি এলোমেলো পাসওয়ার্ড প্রয়োজন যাতে কমপক্ষে 2 টি ছোট-বড় অক্ষর, 2 টি বড় হাতের অক্ষর এবং 2 নম্বর থাকে। পাসওয়ার্ডের দৈর্ঘ্যও সর্বনিম্ন 8 টি হতে হবে।

নিম্নলিখিত নিয়মিত প্রকাশটি এই কেসটিকে বৈধতা দিতে পারে:

^(?=\b\w*[a-z].*[a-z]\w*\b)(?=\b\w*[A-Z].*[A-Z]\w*\b)(?=\b\w*[0-9].*[0-9]\w*\b)[a-zA-Z0-9]{8,}$

এটি এই প্রশ্নের আওতার বাইরে - তবে রেজেক্স লুকোহেড / লুকবিহ্যান্ড এবং লুকোয়ারাউন্ডের উপর ভিত্তি করে ।

নিম্নলিখিত কোডটি অক্ষরগুলির একটি এলোমেলো সেট তৈরি করবে যা এই প্রয়োজনীয়তার সাথে মেলে:

public static string GeneratePassword(int lowercase, int uppercase, int numerics) {
    string lowers = "abcdefghijklmnopqrstuvwxyz";
    string uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string number = "0123456789";

    Random random = new Random();

    string generated = "!";
    for (int i = 1; i <= lowercase; i++)
        generated = generated.Insert(
            random.Next(generated.Length), 
            lowers[random.Next(lowers.Length - 1)].ToString()
        );

    for (int i = 1; i <= uppercase; i++)
        generated = generated.Insert(
            random.Next(generated.Length), 
            uppers[random.Next(uppers.Length - 1)].ToString()
        );

    for (int i = 1; i <= numerics; i++)
        generated = generated.Insert(
            random.Next(generated.Length), 
            number[random.Next(number.Length - 1)].ToString()
        );

    return generated.Replace("!", string.Empty);

}

উপরের প্রয়োজনীয়তা মেটাতে কেবল নিম্নলিখিতটি কল করুন:

String randomPassword = GeneratePassword(3, 3, 3);

কোডটি একটি অবৈধ অক্ষর দিয়ে শুরু হয় ("!" ) - যাতে স্ট্রিংটির দৈর্ঘ্য হয় যাতে নতুন অক্ষরগুলি ইনজেকশন করা যায়।

এরপরে এটি প্রয়োজনীয় ছোট হাতের অক্ষরগুলির 1 থেকে # পর্যন্ত লুপ করে এবং প্রতিটি পুনরাবৃত্তির উপরের ছোট হাতের তালিকা থেকে একটি এলোমেলো আইটেম ধরে এবং স্ট্রিংয়ের এলোমেলো স্থানে এটি সংক্রামিত করে।

এরপরে এটি বড় হাতের অক্ষরের জন্য এবং সংখ্যার জন্য লুপটি পুনরাবৃত্তি করে।

এটি আপনাকে দৈর্ঘ্যের স্ট্রিংগুলি ফিরে দেয় = lowercase + uppercase + numericsযার মধ্যে আপনি চান এমন গণনার ছোট হাতের অক্ষর, বড় হাতের এবং সংখ্যার অক্ষরকে এলোমেলো ক্রমে স্থাপন করা হয়েছে।


3
System.Randomপাসওয়ার্ডের মতো সুরক্ষিত সমালোচনামূলক জিনিসগুলির জন্য ব্যবহার করবেন না । ব্যবহারRNGCryptoServiceProvider
CodeInChaos

lowers[random.Next(lowers.Length - 1)].ToString() এই কোডটি কখনও 'জেড' তৈরি করে না। এলোমেলো.নেক্সট প্রদত্ত সংখ্যার চেয়ে কম পূর্ণসংখ্যার উত্পাদন করে , সুতরাং আপনার দৈর্ঘ্য থেকে অতিরিক্তটি বিয়োগ করা উচিত নয়।
নোটবোনো

6

এই ধরণের পাসওয়ার্ডের জন্য, আমি এমন একটি সিস্টেম ব্যবহার করি যা সম্ভবত আরও সহজে "ব্যবহৃত" পাসওয়ার্ড তৈরি করতে পারে। সংক্ষিপ্ত, প্রায়শই সর্বনামযোগ্য টুকরো এবং কয়েকটি সংখ্যার সমন্বয়ে গঠিত হয় এবং কোনও আন্তঃআরক্ষকের দ্বিধা না থাকে (এটি কি 0 বা একটি হে? এ 1 বা আই?)। কিছুটা এইরকম

string[] words = { 'bur', 'ler', 'meh', 'ree' };
string word = "";

Random rnd = new Random();
for (i = 0; i < 3; i++)
   word += words[rnd.Next(words.length)]

int numbCount = rnd.Next(4);
for (i = 0; i < numbCount; i++)
  word += (2 + rnd.Next(7)).ToString();

return word;

(সরাসরি ব্রাউজারে টাইপ করা হয়েছে, সুতরাং কেবল গাইডলাইন হিসাবে ব্যবহার করুন Also আরও শব্দ যুক্ত করুন)।


6

মেম্বারশিপ.জেনারেটপ্যাসওয়ার্ড () তৈরি করা পাসওয়ার্ডগুলি আমি পছন্দ করি না কারণ সেগুলি খুব কুরুচিপূর্ণ এবং অনেকগুলি বিশেষ অক্ষর রয়েছে।

এই কোডটি একটি 10 ​​ডিজিটের খুব-কুশল পাসওয়ার্ড তৈরি করে।

string password = Guid.NewGuid().ToString("N").ToLower()
                      .Replace("1", "").Replace("o", "").Replace("0","")
                      .Substring(0,10);

অবশ্যই, আমি সমস্ত প্রতিস্থাপনগুলি করতে একটি রেজেক্স ব্যবহার করতে পারি তবে এটি আরও পঠনযোগ্য এবং রক্ষণাবেক্ষণযোগ্য আইএমও।


2
কোনও
জিইউইডি

3
আপনি যদি এই পদ্ধতিটি ব্যবহার করতে চলেছেন তবে আপনি .ToString ("N") ব্যবহার করতে পারেন এবং আপনাকে "-" প্রতিস্থাপন করতে হবে না। "এল" প্রতিস্থাপনেরও দরকার নেই, কারণ এটি হেক্স ডিজিট নয়।
জ্যাকএস

আপনি কেন এটি করেছেন তা সম্পূর্ণভাবে দেখুন। আমার কেবল একটি স্বল্পকালীন (এক দিনেরও কম) পাসওয়ার্ডের প্রয়োজন ছিল যা ব্যবহারকারী হিসাবে খুব বেশি অনন্য হতে হবে না। এইগুলি এবং শূন্যগুলি খুঁজে বের করা বিভ্রান্তি হ্রাস করার দুর্দান্ত উপায়। আমি শুধু আমার বড় হাতের কাছে স্থানান্তরিত করেছি এবং তারপরে দৈর্ঘ্যটি 6.. এ কাটাতে পেরেছি 'এন' পরামর্শ অনুসারেও। ধন্যবাদ!
বিল নোয়েল

6

আমি এই ক্লাসটি তৈরি করেছি যা আরএনজিক্রিপ্টোসোসাইভারপ্রাইডার ব্যবহার করে এবং এটি নমনীয়। উদাহরণ:

var generator = new PasswordGenerator(minimumLengthPassword: 8,
                                      maximumLengthPassword: 15,
                                      minimumUpperCaseChars: 2,
                                      minimumNumericChars: 3,
                                      minimumSpecialChars: 2);
string password = generator.Generate();

দুর্দান্ত, এই ক্লাসে লাইসেন্স কী? আমি কি এটা ব্যবহার করতে পারি?
কোডুলিকে

আপনি যেমন চান এটি ব্যবহার করুন!
অ্যালেক্স সিপম্যান

3

আমি এই পদ্ধতিটি সদস্যতার সরবরাহকারী হিসাবে উপলব্ধ হিসাবে অনুরূপ তৈরি করেছি। আপনি যদি কিছু অ্যাপ্লিকেশনগুলিতে ওয়েব রেফারেন্স যুক্ত করতে না চান তবে এটি দরকারী।

এটি দুর্দান্ত কাজ করে।

public static string GeneratePassword(int Length, int NonAlphaNumericChars)
    {
        string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";
        string allowedNonAlphaNum = "!@#$%^&*()_-+=[{]};:<>|./?";
        Random rd = new Random();

        if (NonAlphaNumericChars > Length || Length <= 0 || NonAlphaNumericChars < 0)
            throw new ArgumentOutOfRangeException();

            char[] pass = new char[Length];
            int[] pos = new int[Length];
            int i = 0, j = 0, temp = 0;
            bool flag = false;

            //Random the position values of the pos array for the string Pass
            while (i < Length - 1)
            {
                j = 0;
                flag = false;
                temp = rd.Next(0, Length);
                for (j = 0; j < Length; j++)
                    if (temp == pos[j])
                    {
                        flag = true;
                        j = Length;
                    }

                if (!flag)
                {
                    pos[i] = temp;
                    i++;
                }
            }

            //Random the AlphaNumericChars
            for (i = 0; i < Length - NonAlphaNumericChars; i++)
                pass[i] = allowedChars[rd.Next(0, allowedChars.Length)];

            //Random the NonAlphaNumericChars
            for (i = Length - NonAlphaNumericChars; i < Length; i++)
                pass[i] = allowedNonAlphaNum[rd.Next(0, allowedNonAlphaNum.Length)];

            //Set the sorted array values by the pos array for the rigth posistion
            char[] sorted = new char[Length];
            for (i = 0; i < Length; i++)
                sorted[i] = pass[pos[i]];

            string Pass = new String(sorted);

            return Pass;
    }

6
System.Randomপাসওয়ার্ডের মতো সুরক্ষিত সমালোচনামূলক জিনিসগুলির জন্য ব্যবহার করবেন না । ব্যবহারRNGCryptoServiceProvider
CodeInChaos

3

আমি কিপাসে অন্তর্নির্মিত পাসওয়ার্ড জেনারেটরের সাথে সর্বদা খুব খুশি হয়েছি। যেহেতু কেপাস একটি নেট নেটওয়ার্ক, এবং ওপেন সোর্স, তাই আমি কোডটি প্রায় কিছুটা খননের সিদ্ধান্ত নিয়েছি। আমি কেবল প্রজেক্টের নীচে কোডটি লেখার জন্য এবং প্রমিত অ্যাপ্লিকেশন ইনস্টলটিতে সরবরাহ করা অনুলিপি, কেপ্যাস.এক্সে উল্লেখ করে শেষ করেছি। আপনি কীপাসকে ধন্যবাদ জানাতে পারেন এটি কতটা নমনীয়। আপনি দৈর্ঘ্য নির্দিষ্ট করতে পারেন, কোন অক্ষরগুলিকে অন্তর্ভুক্ত করা / অন্তর্ভুক্ত করা উচিত নয় ইত্যাদি ইত্যাদি ...

using KeePassLib.Cryptography.PasswordGenerator;
using KeePassLib.Security;


public static string GeneratePassword(int passwordLength, bool lowerCase, bool upperCase, bool digits,
        bool punctuation, bool brackets, bool specialAscii, bool excludeLookAlike)
    {
        var ps = new ProtectedString();
        var profile = new PwProfile();
        profile.CharSet = new PwCharSet();
        profile.CharSet.Clear();

        if (lowerCase)
            profile.CharSet.AddCharSet('l');
        if(upperCase)
            profile.CharSet.AddCharSet('u');
        if(digits)
            profile.CharSet.AddCharSet('d');
        if (punctuation)
            profile.CharSet.AddCharSet('p');
        if (brackets)
            profile.CharSet.AddCharSet('b');
        if (specialAscii)
            profile.CharSet.AddCharSet('s');

        profile.ExcludeLookAlike = excludeLookAlike;
        profile.Length = (uint)passwordLength;
        profile.NoRepeatingCharacters = true;

        KeePassLib.Cryptography.PasswordGenerator.PwGenerator.Generate(out ps, profile, null, _pool);

        return ps.ReadString();
    }

2
public static string GeneratePassword(int passLength) {
        var chars = "abcdefghijklmnopqrstuvwxyz@#$&ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        var random = new Random();
        var result = new string(
            Enumerable.Repeat(chars, passLength)
                      .Select(s => s[random.Next(s.Length)])
                      .ToArray());
        return result;
    }

দয়া করে আপনার উত্তরটি ব্যাখ্যা করুন
লিনাস

1
এই ফাংশনটি কয়েকটি পরিবর্তন সহ খুব ভালভাবে কাজ করে। 1. আপনি একবারে একাধিক কল করা থাকলে এনট্রপি যুক্ত করা হয়েছে। এর অর্থ হল ঘুম () বা কলগুলির মধ্যে ফাংশন সৃষ্টিকারী অন্য কোনও এন্ট্রপি y ২. উত্স অক্ষরের সংখ্যা এবং এলোমেলোতা বৃদ্ধি করুন। আমি কিপাসের সাথে 500 টি চর পাসওয়ার্ডের একটি সিরিজ তৈরি করেছি যার সাথে গুছিয়ে নিতে চাইনি এমন অনুরূপ এবং অন্যান্য অব্যয়যোগ্য অক্ষরগুলির একটি গুচ্ছ বাদ দিয়ে আমি 2000 টির চরিত্রের স্ট্রিং ব্যবহার করেছি। এমনকি 100 মাইল এন্ট্রপির পরেও এলোমেলো অবস্থা বেশ ভাল ছিল।
উইজেনগ্যামোট

2

আমি পাত্রটিতে আরও একটি খারাপ পরামর্শ দেওয়া উত্তর যুক্ত করব।

আমার একটি ব্যবহারের কেস রয়েছে যেখানে আমার কাছে মেশিন-মেশিন যোগাযোগের জন্য এলোমেলো পাসওয়ার্ড প্রয়োজন, তাই মানব পাঠযোগ্যতার জন্য আমার কোনও প্রয়োজন নেই। Membership.GeneratePasswordআমার প্রকল্পে আমারও অ্যাক্সেস নেই এবং নির্ভরতা যুক্ত করতে চাই না।

আমি মোটামুটি নিশ্চিতভাবে এর Membership.GeneratePasswordসাথে কিছু করছে তবে আপনি এখানে অক্ষরের পুলগুলি টিউন করতে পারেন।

public static class PasswordGenerator
{
    private readonly static Random _rand = new Random();

    public static string Generate(int length = 24)
    {
        const string lower = "abcdefghijklmnopqrstuvwxyz";
        const string upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        const string number = "1234567890";
        const string special = "!@#$%^&*_-=+";

        // Get cryptographically random sequence of bytes
        var bytes = new byte[length];
        new RNGCryptoServiceProvider().GetBytes(bytes);

        // Build up a string using random bytes and character classes
        var res = new StringBuilder();
        foreach(byte b in bytes)
        {
            // Randomly select a character class for each byte
            switch (_rand.Next(4))
            {
                // In each case use mod to project byte b to the correct range
                case 0:
                    res.Append(lower[b % lower.Count()]);
                    break;
                case 1:
                    res.Append(upper[b % upper.Count()]);
                    break;
                case 2:
                    res.Append(number[b % number.Count()]);
                    break;
                case 3:
                    res.Append(special[b % special.Count()]);
                    break;
            }
        }
        return res.ToString();
    }
}

এবং কিছু উদাহরণ আউটপুট:

PasswordGenerator.Generate(12)
"pzY=64@-ChS$"
"BG0OsyLbYnI_"
"l9#5^2&adj_i"
"#++Ws9d$%O%X"
"IWhdIN-#&O^s"

ব্যবহার সম্পর্কে অভিযোগ রোধ করার জন্য: এলোমেলোতার Randomপ্রাথমিক উত্স এখনও ক্রিপ্টো আরএনজি। এমনকি যদি আপনি নির্ধারিতভাবে ক্রমটি বেরিয়ে আসতে বাধ্য করেন Random(তবে এটি কেবল উত্পাদিত হয় 1) আপনি এখনও পরবর্তী চরটি বেছে নিতে পারবেন না (যদিও তা হবে সম্ভাবনার পরিসর সীমিত)।

একটি সাধারণ বর্ধিতাংশ হ'ল বিভিন্ন চরিত্রের সেটগুলিতে ওজন যুক্ত করা, যা সর্বোচ্চ মানকে বাড়িয়ে তোলা এবং ওজন বাড়ানোর জন্য পতনের মাধ্যমে কেস যুক্ত করার মতো সহজ হতে পারে।

switch (_rand.Next(6))
{
    // Prefer letters 2:1
    case 0:
    case 1:
        res.Append(lower[b % lower.Count()]);
        break;
    case 2:
    case 3:
        res.Append(upper[b % upper.Count()]);
        break;
    case 4:
        res.Append(number[b % number.Count()]);
        break;
    case 5:
        res.Append(special[b % special.Count()]);
        break;
}

আরও মানবতাবাদী এলোমেলো পাসওয়ার্ড জেনারেটরের জন্য আমি একবার EFF ডাইস-ওয়ার্ড তালিকা ব্যবহার করে একটি প্রম্পট সিস্টেমটি প্রয়োগ করেছি ।


1

আমি পাসওয়ার্ড তৈরির দিকে যেমন দেখতে চাই ঠিক তেমন সফ্টওয়্যার কী তৈরি করা। আপনার এমন একটি চরিত্রের অ্যারে থেকে চয়ন করা উচিত যা একটি ভাল অনুশীলন অনুসরণ করে। @ রাদু094 কী উত্তর দিয়েছিল তা নিন এবং ভাল অনুশীলন অনুসরণ করতে এটি সংশোধন করুন। অক্ষর অ্যারে প্রতিটি অক্ষর রাখবেন না। কিছু চিঠি ফোনে বলা বা বোঝা শক্ত।

এটি পাসওয়ার্ডে একটি চেকসাম ব্যবহার করা উচিত যা এটি আপনার দ্বারা তৈরি হয়েছিল তা নিশ্চিত করার জন্য উত্পন্ন হয়েছিল। এটি সম্পাদনের একটি ভাল উপায় হ'ল লুহান অ্যালগরিদম ব্যবহার করা


1

এখানে আমি দ্রুত একসাথে রাখা কি।

    public string GeneratePassword(int len)
    {
        string res = "";
        Random rnd = new Random();
        while (res.Length < len) res += (new Func<Random, string>((r) => {
            char c = (char)((r.Next(123) * DateTime.Now.Millisecond % 123)); 
            return (Char.IsLetterOrDigit(c)) ? c.ToString() : ""; 
        }))(rnd);
        return res;
    }

1

আমি বর্ণমালা, সংখ্যাসূচক এবং নন_্যালফা_ সংখ্যাসমূহের ভারসাম্য রচনার সাথে পাসওয়ার্ড উত্পন্ন করার জন্য এই কোডটি ব্যবহার করি।

public static string GeneratePassword(int Length, int NonAlphaNumericChars)
    {
        string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";
        string allowedNonAlphaNum = "!@#$%^&*()_-+=[{]};:<>|./?";
        string pass = "";
        Random rd = new Random(DateTime.Now.Millisecond);
        for (int i = 0; i < Length; i++)
        {
            if (rd.Next(1) > 0 && NonAlphaNumericChars > 0)
            {
                pass += allowedNonAlphaNum[rd.Next(allowedNonAlphaNum.Length)];
                NonAlphaNumericChars--;
            }
            else
            {
                pass += allowedChars[rd.Next(allowedChars.Length)];
            }
        }
        return pass;
    }

0

এটি সংক্ষিপ্ত এবং এটি আমার পক্ষে দুর্দান্ত কাজ করে।

public static string GenerateRandomCode(int length)
{
    Random rdm = new Random();
    StringBuilder sb = new StringBuilder();

    for(int i = 0; i < length; i++)
        sb.Append(Convert.ToChar(rdm.Next(101,132)));

    return sb.ToString();
}

এটি "কাজ" করতে পারে তবে এটি অবশ্যই নিরাপদ নয়। পাসওয়ার্ডগুলি সুরক্ষিত হওয়া দরকার।
কোডসইনচাউস

আমি মনে করি এলোমেলো পাসওয়ার্ডগুলি অস্থায়ী পাসওয়ার্ড। কেন তাদের সুরক্ষিত থাকতে হবে তা দেখতে পাবেন না এবং তা করলেও, আপনি পরিসরে সংখ্যা এবং বিশেষ অক্ষর যুক্ত করতে পারেন।
ব্যবহারকারী 1058637

1
সংখ্যা এবং বিশেষ অক্ষর যুক্ত করা সুরক্ষার উন্নতি করে না যদি আপনি তাদের ভবিষ্যদ্বাণীযোগ্য PRNG ব্যবহার করে উত্পন্ন করেন। আপনি যদি জানেন যে কখন একটি পাসওয়ার্ড তৈরি হয়েছিল, তবে আপনি এটিকে সংক্ষিপ্ত করে কেবলমাত্র কয়েকটি প্রার্থীর কাছে রেখে দিতে পারেন।
কোডসইনচওস

0

আমার ওয়েবসাইটে আমি এই পদ্ধতিটি ব্যবহার করি:

    //Symb array
    private const string _SymbolsAll = "~`!@#$%^&*()_+=-\\|[{]}'\";:/?.>,<";

    //Random symb
    public string GetSymbol(int Length)
    {
        Random Rand = new Random(DateTime.Now.Millisecond);
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < Length; i++)
            result.Append(_SymbolsAll[Rand.Next(0, _SymbolsAll.Length)]);
        return result.ToString();
    }

_SymbolsAllআপনার অ্যারে তালিকার জন্য স্ট্রিং সম্পাদনা করুন ।


ইতিমধ্যে সম্পাদনা বিবরণে বলা হয়েছে। কোনও কোড রেফারেন্স না হয়ে যদি আপনি আপনার ওয়েবসাইটটিতে লিঙ্ক করেন তবে আপনি খাঁটি বিজ্ঞাপন দিচ্ছেন এটি স্প্যাম সরবরাহ করে তাই আপনার উত্তর থেকে সেই লিঙ্কটি সরিয়ে দিন।
বোডজোন

0

গৃহীত উত্তরে কিছু পরিপূরক কোড যুক্ত হয়েছে। এটি কেবল র্যান্ডম ব্যবহার করে উত্তরের উপর উন্নতি করে এবং কিছু পাসওয়ার্ড বিকল্পের জন্য অনুমতি দেয়। আমি কেপাস উত্তর থেকে কিছু বিকল্প পছন্দ করেছিলাম কিন্তু আমার সমাধানে এক্সিকিউটেবলকে অন্তর্ভুক্ত করতে চাইনি।

private string RandomPassword(int length, bool includeCharacters, bool includeNumbers, bool includeUppercase, bool includeNonAlphaNumericCharacters, bool includeLookAlikes)
{
    if (length < 8 || length > 128) throw new ArgumentOutOfRangeException("length");
    if (!includeCharacters && !includeNumbers && !includeNonAlphaNumericCharacters) throw new ArgumentException("RandomPassword-Key arguments all false, no values would be returned");

    string pw = "";
    do
    {
        pw += System.Web.Security.Membership.GeneratePassword(128, 25);
        pw = RemoveCharacters(pw, includeCharacters, includeNumbers, includeUppercase, includeNonAlphaNumericCharacters, includeLookAlikes);
    } while (pw.Length < length);

    return pw.Substring(0, length);
}

private string RemoveCharacters(string passwordString, bool includeCharacters, bool includeNumbers, bool includeUppercase, bool includeNonAlphaNumericCharacters, bool includeLookAlikes)
{
    if (!includeCharacters)
    {
        var remove = new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
        foreach (string r in remove)
        {
            passwordString = passwordString.Replace(r, string.Empty);
            passwordString = passwordString.Replace(r.ToUpper(), string.Empty);
        }
    }

    if (!includeNumbers)
    {
        var remove = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
        foreach (string r in remove)
            passwordString = passwordString.Replace(r, string.Empty);
    }

    if (!includeUppercase)
        passwordString = passwordString.ToLower();

    if (!includeNonAlphaNumericCharacters)
    {
        var remove = new string[] { "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "+", "=", "{", "}", "[", "]", "|", "\\", ":", ";", "<", ">", "/", "?", "." };
        foreach (string r in remove)
            passwordString = passwordString.Replace(r, string.Empty);
    }

    if (!includeLookAlikes)
    {
        var remove = new string[] { "(", ")", "0", "O", "o", "1", "i", "I", "l", "|", "!", ":", ";" };
        foreach (string r in remove)
            passwordString = passwordString.Replace(r, string.Empty);
    }

    return passwordString;
}

এটি প্রথম লিঙ্ক ছিল যখন আমি এলোমেলো পাসওয়ার্ড তৈরির জন্য অনুসন্ধান করেছি এবং নিম্নলিখিত প্রশ্নের বর্তমান সুযোগের বাইরে নয় তবে এটি বিবেচনা করা গুরুত্বপূর্ণ।

  • অনুমানের উপর ভিত্তি করে যে System.Web.Security.Membership.GeneratePasswordক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত থাকে ন্যূনতম 20% অক্ষর অ-অক্ষরযুক্ত হয়।
  • এই ক্ষেত্রে অক্ষরগুলি এবং সংযোজন স্ট্রিংগুলি ভাল অনুশীলন হিসাবে বিবেচনা করা হয় এবং পর্যাপ্ত এনট্রপি সরবরাহ করে কিনা তা নিশ্চিত নয়।
  • মেমরিতে সুরক্ষিত পাসওয়ার্ড স্টোরেজের জন্য সিকিউরস্ট্রিংয়ের সাথে কোনও উপায়ে বাস্তবায়ন বিবেচনা করতে পারে ।

এফওয়াইআই, আপনার কীপাস এক্সিকিউটেবল ফাইলটি অন্তর্ভুক্ত করার দরকার নেই, কারণ এটি ওপেন সোর্স (সোর্স কোডটি এখানে ডাউনলোডের জন্য উপলভ্য )
অ্যালেক্স ক্লাউস ২

0

বৈধচরগুলি যে কোনও নির্মাণ হতে পারে তবে আমি সিদ্ধান্ত নিয়েছি যে নিয়ন্ত্রণ চরগুলি অপসারণ করে এএসআইআই কোড রেঞ্জের ভিত্তিতে নির্বাচন করব select এই উদাহরণে এটি একটি 12 টি চরিত্রের স্ট্রিং।

string validChars = String.Join("", Enumerable.Range(33, (126 - 33)).Where(i => !(new int[] { 34, 38, 39, 44, 60, 62, 96 }).Contains(i)).Select(i => { return (char)i; }));
string.Join("", Enumerable.Range(1, 12).Select(i => { return validChars[(new Random(Guid.NewGuid().GetHashCode())).Next(0, validChars.Length - 1)]; }))

0
 Generate random password of specified length with 
  - Special characters   
  - Number
  - Lowecase
  - Uppercase

  public static string CreatePassword(int length = 12)
    {
        const string lower = "abcdefghijklmnopqrstuvwxyz";
        const string upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        const string number = "1234567890";
        const string special = "!@#$%^&*";

        var middle = length / 2;
        StringBuilder res = new StringBuilder();
        Random rnd = new Random();
        while (0 < length--)
        {
            if (middle == length)
            {
                res.Append(number[rnd.Next(number.Length)]);
            }
            else if (middle - 1 == length)
            {
                res.Append(special[rnd.Next(special.Length)]);
            }
            else
            {
                if (length % 2 == 0)
                {
                    res.Append(lower[rnd.Next(lower.Length)]);
                }
                else
                {
                    res.Append(upper[rnd.Next(upper.Length)]);
                }
            }
        }
        return res.ToString();
    }

কোডের উত্তরগুলি কেবলমাত্র উত্সাহিত নয় কারণ তারা ভবিষ্যতের পাঠকদের জন্য বেশি তথ্য সরবরাহ করবেন না দয়া করে আপনি যা লিখেছেন তার কিছু ব্যাখ্যা দিন
হোয়াইটপয়েন্ট

বারবার একই পাসওয়ার্ড তৈরি করে। Randomস্থির হিসাবে উদাহরণ থাকতে হবে
ট্রিলম্যাক্স

দয়া করে নোট করুন যে এই উত্তরটি একই পাসওয়ার্ডটি উত্পন্ন করবে যদি একাধিকবার একাধিকবার বলা হয় !!! যদি আপনি একবারে একাধিক রেকর্ডে কোড ব্যবহার করে পাসওয়ার্ড বরাদ্দ করতে ফাংশনটি ব্যবহার করতে চান তবে অবশ্যই কলগুলির মধ্যে এনট্রপি যুক্ত থাকতে হবে। তবুও দরকারী যদিও ....
উইজেনগ্যামোট

0

এই প্যাকেজটি আপনাকে স্বতঃস্ফূর্তভাবে কোনও অক্ষর থাকতে হবে তা নির্দেশ করার সময় একটি এলোমেলো পাসওয়ার্ড তৈরি করার অনুমতি দেয় (যদি প্রয়োজন হয়):

https://github.com/prjseal/PasswordGenerator/

উদাহরণ:

var pwd = new Password().IncludeLowercase().IncludeUppercase().IncludeSpecial();
var password = pwd.Next();

0

আপনি যদি সিস্টেম.ওয়েব.সিকিউরিটি.মেম্বারশিপ.জেনারেট পাসওয়ার্ড দ্বারা ব্যবহৃত ক্রিপ্টোগ্রাফিক সুরক্ষিত এলোমেলো সংখ্যা জেনারেশন ব্যবহার করতে চান তবে অক্ষরকে বর্ণানুক্রমিক বর্ণগুলিতেও সীমাবদ্ধ রাখতে চান, আপনি ফলাফলটিকে একটি রেইগেক্স দিয়ে ফিল্টার করতে পারবেন:

static string GeneratePassword(int characterCount)
{
    string password = String.Empty;
    while(password.Length < characterCount)
        password += Regex.Replace(System.Web.Security.Membership.GeneratePassword(128, 0), "[^a-zA-Z0-9]", string.Empty);
    return password.Substring(0, characterCount);
}

-3
public string Sifre_Uret(int boy, int noalfa)
{

    //  01.03.2016   
    // Genel amaçlı şifre üretme fonksiyonu


    //Fonskiyon 128 den büyük olmasına izin vermiyor.
    if (boy > 128 ) { boy = 128; }
    if (noalfa > 128) { noalfa = 128; }
    if (noalfa > boy) { noalfa = boy; }


    string passch = System.Web.Security.Membership.GeneratePassword(boy, noalfa);

    //URL encoding ve Url Pass + json sorunu yaratabilecekler pass ediliyor.
    //Microsoft Garanti etmiyor. Alfa Sayısallar Olabiliyorimiş . !@#$%^&*()_-+=[{]};:<>|./?.
    //https://msdn.microsoft.com/tr-tr/library/system.web.security.membership.generatepassword(v=vs.110).aspx


    //URL ve Json ajax lar için filtreleme
    passch = passch.Replace(":", "z");
    passch = passch.Replace(";", "W");
    passch = passch.Replace("'", "t");
    passch = passch.Replace("\"", "r");
    passch = passch.Replace("/", "+");
    passch = passch.Replace("\\", "e");

    passch = passch.Replace("?", "9");
    passch = passch.Replace("&", "8");
    passch = passch.Replace("#", "D");
    passch = passch.Replace("%", "u");
    passch = passch.Replace("=", "4");
    passch = passch.Replace("~", "1");

    passch = passch.Replace("[", "2");
    passch = passch.Replace("]", "3");
    passch = passch.Replace("{", "g");
    passch = passch.Replace("}", "J");


    //passch = passch.Replace("(", "6");
    //passch = passch.Replace(")", "0");
    //passch = passch.Replace("|", "p");
    //passch = passch.Replace("@", "4");
    //passch = passch.Replace("!", "u");
    //passch = passch.Replace("$", "Z");
    //passch = passch.Replace("*", "5");
    //passch = passch.Replace("_", "a");

    passch = passch.Replace(",", "V");
    passch = passch.Replace(".", "N");
    passch = passch.Replace("+", "w");
    passch = passch.Replace("-", "7");





    return passch;



}

আপনার কোড কী করে তা ব্যাখ্যা করতে পারেন এবং কেন? পর্যালোচনা থেকে
ওয়াই হা লি

কোনও বিবরণ ছাড়াই কোডের উত্তরগুলি মুছার সম্ভাবনা রয়েছে।
রুক

-4

একটি টাইমার timeোকান: টাইমার 1, 2 বোতাম: বোতাম 1, বোতাম 2, 1 পাঠ্যবক্স: পাঠ্যবক্স 1, এবং একটি কম্বোবক্স: কম্বোবক্স 1। নিশ্চিত করুন যে আপনি ঘোষণা করেছেন:

int count = 0;

সোর্স কোড:

 private void button1_Click(object sender, EventArgs e)
    {
    // This clears the textBox, resets the count, and starts the timer
        count = 0;
        textBox1.Clear();
        timer1.Start();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
    // This generates the password, and types it in the textBox
        count += 1;
            string possible = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
            string psw = "";
            Random rnd = new Random { };
            psw += possible[rnd.Next(possible.Length)];
            textBox1.Text += psw;
            if (count == (comboBox1.SelectedIndex + 1))
            {
                timer1.Stop();
            }
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        // This adds password lengths to the comboBox to choose from.
        comboBox1.Items.Add("1");
        comboBox1.Items.Add("2");
        comboBox1.Items.Add("3");
        comboBox1.Items.Add("4");
        comboBox1.Items.Add("5");
        comboBox1.Items.Add("6");
        comboBox1.Items.Add("7");
        comboBox1.Items.Add("8");
        comboBox1.Items.Add("9");
        comboBox1.Items.Add("10");
        comboBox1.Items.Add("11");
        comboBox1.Items.Add("12");
    }
    private void button2_click(object sender, EventArgs e)
    {
        // This encrypts the password
        tochar = textBox1.Text;
        textBox1.Clear();
        char[] carray = tochar.ToCharArray();
        for (int i = 0; i < carray.Length; i++)
        {
            int num = Convert.ToInt32(carray[i]) + 10;
            string cvrt = Convert.ToChar(num).ToString();
            textBox1.Text += cvrt;
        }
    }

1
System.Randomসুরক্ষার জন্য ব্যবহার করবেন না ।
কোডসইনচাউস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.