PDA

View Full Version : username و password بدون استفاده از دیتابیس



m_amin_t
چهارشنبه 30 مرداد 1387, 14:35 عصر
سلام
راهی هست که بدون استفاده از دیتابیس برای برنامه م پسورد درست کنم طوری که کاربر هم بتونه اون رو تغییرش بده؟

mehdi.mousavi
چهارشنبه 30 مرداد 1387, 15:22 عصر
سلام راهی هست که بدون استفاده از دیتابیس برای برنامه م پسورد درست کنم طوری که کاربر هم بتونه اون رو تغییرش بده؟

سلام.
میتونید از فایل Config، برای Persist کردن UID/PWD استفاده کنید.

m_amin_t
چهارشنبه 30 مرداد 1387, 15:58 عصر
سلام
ممنون ولی چیزی متوجه نشدم. اگه ممکنه بیشتر توضیح بدین.

Sajjad.Aghapour
چهارشنبه 30 مرداد 1387, 17:43 عصر
دوست عزیز شما یک بانکی از user,pass رو می خواین ایجاد کنید یا اینکه برای ورود فقط یک user,pass وجود داره؟

mehdi.mousavi
چهارشنبه 30 مرداد 1387, 17:52 عصر
سلام ممنون ولی چیزی متوجه نشدم. اگه ممکنه بیشتر توضیح بدین.

سلام.
منظورم اینه که ID/PWD رو در appSettings Element یا یک Custom Element دیگه در فایل config نگهداری کنید. خواه یکی باشه، خواه N تا.

m_amin_t
پنج شنبه 31 مرداد 1387, 11:04 صبح
دوست عزیز شما یک بانکی از user,pass رو می خواین ایجاد کنید یا اینکه برای ورود فقط یک user,pass وجود داره؟

فقط برای ورود

Sajjad.Aghapour
پنج شنبه 31 مرداد 1387, 11:53 صبح
همون جور که قبلا بحث شده و آقا مهدی هم گفتن بهترین راه برای ایجاد اینگونه تنظیمات استفاده از Settings هست.به اینگونه:
1.روی Properties در پنجره Solution دابل کلیک کنید.
2.در پنجره باز شده و در تب Settings متغیر خودتون رو با نام و تایپ دلخواه(که در اینجا string) است ایجاد کنید.فقط باید این نکته رو در نظر بگیرید که خاصیت scope باید روی user قرار بگیرد تا بتوان تغییرات رو در اون اعمال کرد
3.حالا می تونید در پنجره Login که در ابتدا دارید اینگونه اطلاعات رو چک کنید که درست است یا نه
(در اینجا در قسمت settings دو متغیر به نامهای Username,Pass از نوع string ایجاد شده است)


string username = Properties.Settings.Default.Username;
string pass = Properties.Settings.Default.Pass;
if (txtUName.Text == username && txtPass.Text == pass)
mainForm.Show();

برای تغییر اون هم میتونید به شیوه زیر عمل کنید


Properties.Settings.Default.Pass = txtPass.Text;
Properties.Settings.Default.Username = txtUName.Text;
Properties.Settings.Default.Save();

Blackk_lightt
پنج شنبه 31 مرداد 1387, 13:48 عصر
سلام
این برنامه رو ببین
فکر نمی کنم چیزی کم داشته باشه.امیدوارم کارت راه بیفته

البته روشی که آقای Sajjadlove گفتن کامل تره ولی اگه مبتدی هستی این کارتو را میندازه

Amir Oveisi
پنج شنبه 31 مرداد 1387, 19:45 عصر
در ضمن حتما مقدار hash code مربوط به password و username رو نگهداری کنین و از نگهداری اونا بصورت plain text خودداری کنید.

موفق باشید
jooje

jaza_sa
یک شنبه 03 شهریور 1387, 23:47 عصر
دیدن این لینک خالی از لطف نیست :
http://barnamenevis.org/forum/showpost.php?p=580352&postcount=7

linux
سه شنبه 05 شهریور 1387, 00:24 صبح
سلام
این برنامه رو ببین
فکر نمی کنم چیزی کم داشته باشه.امیدوارم کارت راه بیفته

البته روشی که آقای Sajjadlove گفتن کامل تره ولی اگه مبتدی هستی این کارتو را میندازه
الگوریتم شما کمی ناامن هست.
بهترین راه استفاده از الگوریتم های متقارن کدگذاری است که کلید هم از روی نام کاربر تعیین شده باشد
مثال زیر


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;
namespace CStest
{
public class cryptography
{
UTF8Encoding utf8 = new UTF8Encoding();
//ASCIIEncoding utf8 = new ASCIIEncoding();
public string Encrypt(string UserName, string Password)
{
byte[] Un = new byte[15];
// Declare the streams used
// to encrypt to an in memory
// array of bytes.
MemoryStream msEncrypt = null;
CryptoStream csEncrypt = null;
StreamWriter swEncrypt = null;

MD5CryptoServiceProvider md5s = new MD5CryptoServiceProvider();
// md5s.Clear();
Un = md5s.ComputeHash(utf8.GetBytes(UserName));
RijndaelManaged myRijndael = new RijndaelManaged();
myRijndael.Mode = CipherMode.CBC;
myRijndael.Key = Un;
myRijndael.IV = md5s.ComputeHash(utf8.GetBytes(Password));
// Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = myRijndael.CreateEncryptor(myRijndael.Key, myRijndael.IV);

// Create the streams used for encryption.
msEncrypt = new MemoryStream();
csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
swEncrypt = new StreamWriter(csEncrypt);


csEncrypt.Write(utf8.GetBytes(Password), 0, utf8.GetBytes(Password).Length);
//Write all data to the stream.
//swEncrypt.Write(Password);
csEncrypt.FlushFinalBlock();
return Convert.ToBase64String(md5s.ComputeHash(msEncrypt. ToArray()));
}
}
}

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

Blackk_lightt
دوشنبه 11 شهریور 1387, 13:57 عصر
سلام
اکه ممکنه یه کم در باره کدتون توضیح بدید
من زیاد ازش سر در نیاوردم !!!

Amir Oveisi
دوشنبه 11 شهریور 1387, 15:05 عصر
اکه ممکنه یه کم در باره کدتون توضیح بدید
در مورد الگوریتم AES (http://msdn.microsoft.com/en-us/library/system.security.cryptography.aes.aspx)در MSDN جستجو کنید.

linux
دوشنبه 11 شهریور 1387, 20:12 عصر
سلام
اکه ممکنه یه کم در باره کدتون توضیح بدید
من زیاد ازش سر در نیاوردم !!!
md5 یک الگوریتم هش کردن هست ، یعنی ورودی چه یک بایت چه چند گیگابایت باشد خروجی 128 بایتی هست.
الگوریتم رینجیدیل یک الگوریتم رمز کردن متقارن هست.
با گرفتن هست نام کاربر و پسورد و قرار دادن آنها به عنوان کلید و رمز کردن پسورد و سر انجام هش کردن این رمز بدست آمده خروجی ساخته می شود که نمی توان از روی آن به ورودی رسید ما این خروجی را در یک فایل ذخیره می کنیم و هر فقط کاربر خواست وارد برنامه بشود باز با همین الگوریتم پسورد را به خروجی تبدیل کرده و اگر خروجی تبدیل شده با مقدار ذخیره شده در فایل یکی باشد پسورد درست هست و ادامه کار در غیر این صورت جلوگیری از ورود به برنامه ، تنها قسمت مهم کار این هست که این الگوریتم کاملا محرمانه بماند و کسی نتواند به آن دست رسی پیدا کند