PDA

View Full Version : آموزش: سورس کد برنامه ی تولید کننده ی پسورد تصادفی به زبان سی شارپ



birtemp
جمعه 17 آذر 1391, 22:39 عصر
سلام . برای امروز آموزش ساخت برنامه ی تولید کننده ی پسوردهای تصادفی در زبان برنامه نویسی سی شارپ رو آماده کردم. پسوردهای تصادفی بیشتر در برنامه های دارای بخش ثبت نام کاربر مورد استفاده قرار می گیرن که قراره ما در اینجا یکی از ساده ترین و بهترین روش های انجام اینکار رو مطرح خواهد شد.
در این برنامه همچنین امکان اضافه کردن کاراکترهای فارسی ، انگلیسی ، اعداد و علامات مختلف وجود دارد که باید بصورت دستی توسط کاربر یا برنامه نویس وارد شود. خب بهتره بریم سراغ آموزش.
برنامه ساخت پسورد تصادفی از دو کلاس به شرح زیر تشکیل شده:


AlphabetDictionaries : کاراکترهای از پیش تعریف شده در این کلاس قرار می گیرند.
AlphabetWordGenerator : عمل تولید پسورد تصادفی (از به هم دوختن کاراکترهای تعریف شده در AlphabetDictionaries) در این کلاس انجام می شود.

مرحله ۱: به نرم افزار ویژوال استودیو (http://www.prolearn-vs.com/visual-studio-ultimate-2012-x86-rtm.html) برید و یه پروژه Windows form با زبان سی شارپ ایجاد کنید.

http://www.prolearn-vs.com/wp-content/uploads/2012/12/password-generator-in-csharp-1.jpg (http://www.prolearn-vs.com/wp-content/uploads/2012/12/password-generator-in-csharp-1.jpg)
مرحله ۲: از جعبه ابزار (Toolbox) یک کنترل Textbox و یک کنترل Button به فرم اضافه کنید.

http://www.prolearn-vs.com/wp-content/uploads/2012/12/password-generator-in-csharp-21.jpg (http://www.prolearn-vs.com/wp-content/uploads/2012/12/password-generator-in-csharp-21.jpg)
مرحله ۳: روی فرم راست کلیک و گزینه View Code رو انتخاب کنید. بعد وارد شدن به سورس برنامه ، با استفاده از کدهای زیر کلاس مربوط به کاراکترهای پسورد (AlphabetDictionaries) رو ایجاد کنید:

public static class AlphabetDictionaries
{
public const string EnglishLowerCase = "abcdefghijklmnopqrstuvwxyz";
public const string EnglishUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public const string Numeric = "0123456789";
public const string SpecialSymbols = "`~!@#$%^&*()-_=+[]{}\\|;:'\",<.>/?";
}


مرحله ۴: حالا برای ساخت کلاس تولید کننده پسورد (که همان کلاس اصلی برنامه هم محسوب میشه) باید کدهای زیر رو اضافه کرد:

public sealed class AlphabetWordGenerator : IWordGenerator
{
private readonly string _alphabet;
private readonly RNGCryptoServiceProvider _provider = new RNGCryptoServiceProvider();

public AlphabetWordGenerator(List<string> alphabets)
{
if (alphabets == null || alphabets.Count == 0)
{
throw new ArgumentException();
}
_alphabet = string.Join(string.Empty, alphabets);
}

public AlphabetWordGenerator(string alphabet)
{
if (string.IsNullOrWhiteSpace(alphabet))
{
throw new ArgumentException();
}
_alphabet = alphabet;
}

public int MinLenth { private get; set; }

#region IWordGenerator

public string Generate()
{
if (MinLenth < 1)
{
throw new IndexOutOfRangeException("MinLenth is out of range");
}
return DoGenerate(MinLenth);
}

#endregion

private string DoGenerate(int wordLength)
{
var repository = new List<char>(wordLength);
var data = new byte[wordLength];
_provider.GetBytes(data);
foreach (byte item in data)
{
int index = Convert.ToInt32(item)%_alphabet.Length;
char symbol = _alphabet[index];
repository.Add(symbol);
}
return string.Join(string.Empty, repository);
}
}


مرحله ۵: تا اینجا تقریباً کار تمومه و شما می تونید به دو روش عمل تولید رو انجام بدید. پس به همین منظور روی کنترل Button دابل کلیک کرده و هر کدوم از کدهای زیر رو به صورت جداگانه امتحان کنید.
تولید پسوردهای حاوی تنها حروف کوچک (انگلیسی) مانند “owlzwavdtm”

var generator = new AlphabetWordGenerator(AlphabetDictionaries.English LowerCase)
{
MinLenth = 10
};

textBox1.Text = generator.Generate();


تولید پسوردهای حاوی حروف کوچک و بزرگ ، اعداد و علامات مانند “|[*l1V^NrgFO)t.c3tZ7-0}]g!YSU9z649WN5″Gz”

var alphabets = new List<string>
{
AlphabetDictionaries.EnglishLowerCase,
AlphabetDictionaries.EnglishUpperCase,
AlphabetDictionaries.Numeric,
AlphabetDictionaries.SpecialSymbols,
};

var generator = new AlphabetWordGenerator(alphabets)
{
MinLenth = 40
};

textBox1.Text = generator.Generate();


سورس کامل برنامه

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;

namespace password_generator
{
public partial class AlphabetWordGenerator : Form
{
public AlphabetWordGenerator()
{
InitializeComponent();
}

public static class AlphabetDictionaries
{
public const string EnglishLowerCase = "abcdefghijklmnopqrstuvwxyz";
public const string EnglishUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public const string Numeric = "0123456789";
public const string SpecialSymbols = "`~!@#$%^&*()-_=+[]{}\\|;:'\",<.>/?";
}

private readonly string _alphabet;
private readonly RNGCryptoServiceProvider _provider = new RNGCryptoServiceProvider();

public AlphabetWordGenerator(List<string> alphabets)
{
if (alphabets == null || alphabets.Count == 0)
{
throw new ArgumentException();
}
_alphabet = string.Join(string.Empty, alphabets);
}

public AlphabetWordGenerator(string alphabet)
{
if (string.IsNullOrWhiteSpace(alphabet))
{
throw new ArgumentException();
}
_alphabet = alphabet;
}

public int MinLenth { private get; set; }

#region IWordGenerator

public string Generate()
{
if (MinLenth < 1)
{
throw new IndexOutOfRangeException("MinLenth is out of range");
}
return DoGenerate(MinLenth);
}

#endregion

private string DoGenerate(int wordLength)
{
var repository = new List<char>(wordLength);
var data = new byte[wordLength];
_provider.GetBytes(data);
foreach (byte item in data)
{
int index = Convert.ToInt32(item) % _alphabet.Length;
char symbol = _alphabet[index];
repository.Add(symbol);
}
return string.Join(string.Empty, repository);
}

private void button1_Click_1(object sender, EventArgs e)
{
var generator = new AlphabetWordGenerator(AlphabetDictionaries.English LowerCase)
{
MinLenth = 10
};

var password = generator.Generate();

textBox1.Text = generator.Generate();
}
}
}


تصویری از خروجی برنامه

http://www.prolearn-vs.com/wp-content/uploads/2012/12/password-generator-in-csharp-3.jpg (http://www.prolearn-vs.com/wp-content/uploads/2012/12/password-generator-in-csharp-3.jpg)

به نظر شما پسوردهایی که این برنامه تولید می کنه ، قابل تشخیص و هک شدن هست؟
فایل نمونه (http://www.prolearn-vs.com/wp-content/uploads/2012/12/password-generator-www.prolearn-vs.com_.rar)

منبع : پرولرن (http://www.prolearn-vs.com)

siedmohsen
جمعه 17 آذر 1391, 23:21 عصر
سلام خدمت دوستان
ضمن تشکر از دوست خوبمون این هم یک الگوریتم رمز نگاری به نام chao
Encrypting with Chao (http://pro-programming.com/?p=306)

abdullah20
شنبه 18 آذر 1391, 09:17 صبح
سلام خدمت دوستان
ضمن تشکر از دوست خوبمون این هم یک الگوریتم رمز نگاری به نام chao
Encrypting with Chao (http://pro-programming.com/?p=306)

دوست عزیز ایشون اموزش تولید پسورد تصادفی را گذاشتن اخه چه ربطی به الگوریتم رمزنگاری داره؟
درمورد اموزش هم دست شما درد نکنه ولی من یه پیشنهاد دارم اینم نه تنها به شما بلکه به دیگر دوستان هم این پیشنهاد را میکنم
اونم اینکه اگر میخواید یه اموزش قرار بدید یه چیزی رو اموزش بدید که پیدا کردن و یاد گرفتنش سخت باشه
مثلا همین تولید پسورد با یه جستجوی ساده توی همین سایت پیداش میکنید و البته با کدنویسی خیلی کمتر از اون چیزی که شما قرار دادید

s3rv3r
شنبه 18 آذر 1391, 09:25 صبح
راستش داداش نه قابل هک شدن نیستن ولی نمیشه هم حفظش کرد باس یه جا بنویسه آدم که اونم یدفه دیدی افتاد دست کسه دیگه:لبخند: