PDA

View Full Version : چگونه پسورد رو ذخیره کنم



Ahmad-VB
دوشنبه 07 مهر 1382, 05:12 صبح
سلام دوستان
یه سوال دارم که فکر میکنم ساده باشه .من در برنامم از کاربرم پسوردی می گیرم تا برای ورودهای بعدی از اون استفاده کنه . میخواستم ببینم این پسورد رو کجا و چه جوری ذخیره کنم که امن باشه.
متشکرم احمد :P

jannati
دوشنبه 07 مهر 1382, 07:31 صبح
دوست عزیز
به نظر من میتونید یک متغییر عمومی در moduleتعریف کنید و passwordرا درآن تا پایان اجرای برنامه نگهداری کنید.البته برای امن شدن از یک روش رمزگذاری استفاده کنید.یعنی بوسیله یک تابع passwordرا رمزگذاری کنید و هر جالازم شد آن راdecodeکنید.
امیدوارم جواب سوالتان راگرفته باشید.

mr_esmaily
دوشنبه 07 مهر 1382, 14:14 عصر
دوست عزیز
به نظر من میتونید یک متغییر عمومی در moduleتعریف کنید و passwordرا درآن تا پایان اجرای برنامه نگهداری کنید.البته برای امن شدن از یک روش رمزگذاری استفاده کنید.یعنی بوسیله یک تابع passwordرا رمزگذاری کنید و هر جالازم شد آن راdecodeکنید.
امیدوارم جواب سوالتان راگرفته باشید.

سلام
منظورتون از decode چیست؟ :wink:

M-Gheibi
دوشنبه 07 مهر 1382, 16:13 عصر
Decode is opposite of CODE
وقتی یک رشته را به صورت رمز (کد) در می آورید، برای استفاده بعدی باید آن را به صورت قبلی برگردانید که به آن Decode میگویند.

Ahmad-VB
دوشنبه 07 مهر 1382, 20:43 عصر
ببخشید اما مثل اینکه سوالم رو متوجه نشدید.گفتم پسورد رو کجا ذخیره کنم تا کاربر در ورودهای بعدیش بتونه از اون استفاده کنه.
یعنی کاربر برنامه رو میبنده و ازش خارج میشه با این حساب این چیزی که شما گفتید فکر نکنم عملی باشه :wink:

jannati
سه شنبه 08 مهر 1382, 08:52 صبح
ببخشید که منظورتون را درست متوجه نشده بودم.
خوب حالا هم میتونید که Passwordرادر یک فایل در یک مسیر مشخص ذخیره کنید .البته به صورت رمزگذاری شده.بعد هر دفعه که کاربر برنامه را RUNکرد پسورد مورد نظر را از اون فایل بخونه و رمزگشایی کنه.بعد در اختیار کاربر قرار بده.
البته یه کم غیر منطقی به نظر میرسه.چون اینطوری اگر کسی کلمه کاربری را بدونه میتونه به جای دیگری لاگین کنه.نه؟

Ahmad-VB
پنج شنبه 10 مهر 1382, 05:39 صبح
جناب جنتی ببخشید ها اما اینطوری اگر کاربر غیر مجاز یه طوری اون فایل رو پیدا کرد و پاکش کرد یا اصلا به طور اتفاقی پاک شد چی . میخوام بدونم اگر توی یه فایل ذخیرش کردم چطوری کاری کنم که پاک نشه حداقل بعد از اینکه برنامه من اجرا شد دیگه پاک نشه .
مثل خیلی از فایلها که وقتی میخوای پاکشون کنی میگه این فایل در حال استفاده توشط برنامه دیگری است وپاکش نمیکنه.
در مورد اینکه گفتید غیر منطقی شلید هنوز متوجه منظورم نشدید . میخوام مثلا یه چیزی مثل رجیستر و لاگ این همینجا باشه.

روح اله معینی زاده
پنج شنبه 10 مهر 1382, 12:52 عصر
سلام دوستان گرامی

این چیزی رو که دارم می گم خودم امتحان نکردم ولی وقتی دیدم دوستمون اونقدر اصرار داره که حذف نشه خوب چیزی که به ذهنم رسید گفتم بنویسم، برنامه نویسای وارد هم اینجا هستن اگه روش مناسبی بلد هستن که خوب راهنمایی کنن.

اون قضیه ای که دوستمون گفته که برخی فایل ها رو ویندوز می گه که در حال استفاده است، احتمالا بشه به یه طریقی حلش کرد.

دو تا نظر داشتیم.
1- یکی از دوستان گفته که باید توی یک فایل دیگه رمزها رو نگهداری کنی.
2- شما گفتی که می خوام ویندوز نذاره پاک بشه.

از 1 و 2 نتیجه می شود احتمالا بهترین روش ذخیره اطلاعات در یک فایل DLL است که در ویندوز رجیستر شود که ویندوز اجازه پاک کردن آن را ندهد. منظورم یک DLL واقعی نیست، یک فایل درست می کنی با هر نامی که دوست داشتی، بعد یک پسوند dll هم به اون می دی و رجیسترش می کنی، از اون به بعد ویندوز اجازه پاک کردن بهش نمی ده، بماند که کاربران هم از ترس اینکه ممکنه از فایل های اصلی برنامه باشه بهش کاری نخواهند داشت :oops: :shock: :lol:

فقط تو این قضیه یه سری مسائل می مونه و اونا اینکه اگه به هر علت ویندوزت پاک بشه، رجیستر درست انجام نشه و از همه مهمتر اینکه نمی دونم آیا وقتی این فایل رجیستر شد، می تونی از تو برنامه ات داده وارد کنی یا نه؟ وجود خواهد داشت.

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

با احترام- خدانگهدار.

کم حوصله
پنج شنبه 10 مهر 1382, 13:23 عصر
سلام
دوست عزیز یک راه حل دیگه هم است اما منطقی نیست ولی خوب کار آمد است
ببین می تونی تو همون دیتابیس که داری یک جدول ایجاد کنی و دوتا فیلد برای آن طراحی کنی یکی کد کاربری و یکی هم پسورد آن ( البته پسورد را به همون صورت که خانم جنتی لطف فرمودند و گفتن کد کنی ) بعد زمانی که کاربر بالا می آید و کد و رمزش را وارد می کنه یکسری به بانک بزنی و کد و پسورد را چک کنی چنانچه درست بود اجازه ورود به کاربر بدی
در ضمن بار اینکه هیچ وقت نتونه کاربر به بانک رخنه کنه و به قول شما پسورد را پاک کنه کافیه کد کردن پسوردت را به صورتی تنظیم کنی که حتی اگر کاربری برای خود رمزی نگذاشت مکان رمزش با حرف فاصله ( البته کد شده ) پرشود خوب در این صورت شما می توانی زمانی که کاربری فیلد پسورد را دستکاری کرد و مقدارش را پاک کرد با توجه به اینکه برای برنامه شما فیلد خالی معنایی نداره از ورودش جلو گیری کنی :wink:
امید وارم که مقبول بوده باشد :oops:
در ضمن بهم نخندی ها ولی خوب این طرح را یکی از دوست هام پیاده کرده بود و خیلی هم ازش راضی بود :wink:

mehrzad007
جمعه 11 مهر 1382, 10:03 صبح
بهترین روشی که من می تونم پینهاد کنم و خودم هم استفاده کردم و راضیم اینه :
پسورد و کد شد ه بزار تو رجیستری و بعد می تونی ازش استفاده کنی . بهترین راه همینه فقط بزار تو یه مسیر چپ اندر قیچی که معلوم نشه

Farhad.B.S
جمعه 11 مهر 1382, 13:20 عصر
سلام.
در مورد ذخیره کردن تو یه dll و بعد رجیستر کردن اون : اگه امتحان کنید خواهید دید که یه دی ال ال که اینطوری ساخته شده باشه , رجیستر هم نخواهد شد.
در مورد ذخیره کردن تو رجیستری یا یه فایل خاص که دور از دسترس باشه , اگه با یه برنامه مثل install watch روند نصب یه برنامه رو کنترل کنید ,آدرس اون فایل یا کلید رجیستری رو پیدا خواهید کرد.
تنها کاری که میمونه اینه که شما یکی از فایل های سیستمی (یه دی ال ال یا حتی explorer.exe ) رو باز کرده و در انتهای اون اطلاعاتی رو که قصد نگهداریش رو دارید به صورت رمز شده بنویسید :wink:

کم حوصله
جمعه 11 مهر 1382, 17:48 عصر
سلام
دوستان شاید راه حل های شما درست باشد اما اگر برنامه دوستمان بر روی شبکه اجرا شود یک عیب دارد آن هم این است که اگر کاربری بر روی سیستم به غیر از سیستم خود کار کند دیگر رمز ان وجود ندارد چون رمزش برروی سیستم دیگری ذخیره شده :oops:
پس باید رمز در جایی ذخیره گردد که در همه جا قابل دستیابی باشد :wink:

جمعه 11 مهر 1382, 21:58 عصر
اگر برنامه شما از SQL Server استفاده می کنه، بهترین راه این هست که از انواع Login کردن های SQL Server استفاده کنین ( Windows و یا UserName ) و خودتون Password رو هیچ جایی ذخیره نکنین ... این طوری امنیت برنامه شما با بالارفتن امینت ویندوز، افزایش پیدا می کنه و در شبکه هم هیچ مشکلی ندارین.
و کاربری که برای اون دسترسی های خاصی تعیین کردین اگر مستقیما هم از DataBase استفاده کنه، باز هم همون دسترسی ها رو خواهد داشت.

S.Azish
شنبه 12 مهر 1382, 15:23 عصر
برای اینکار روشهای مختلفی وجود داره ولی روش ذخیره در Database به صورت کد شده یکی از بهترین روش ها هست. به این شکل که یک جدول در Database خودتون درست کنید مثل tblUsers و این فیلدها رو داره

ID, Autonumber or Identity
UserName, String or Varchar
Password, String or Varchar

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

Voldemort
پنج شنبه 17 مهر 1382, 19:27 عصر
Ahmad-Vb عزیز من همیشه از روش پیشنهادی S.Azish عزیز در پروژه هایم استفاده کرده ام و همیشه جواب گرفته ام. من هم فکر می کنم این بهترین روش باشد.

کم حوصله
شنبه 19 مهر 1382, 01:30 صبح
:P :P
آقای ولدمورت این همون روشی است که من بالا توضیح دادم و آقای آذیش عزیز هم آن را تتاید کردن :oops:

Ahmad-VB
شنبه 19 مهر 1382, 05:23 صبح
سلام دوستان
از همتون به خاطر جوابهایی که دادید متشکرم. اما من اصلا قصد کار با دیتا بیس رو ندارم تاحالا خیلی هم تو این زمینه کار نکردم . در ضمن مگه دیتا بیسها قابل پاک شدن نیستن.
در مورد ذخیره در یه فایل dll ویا رجیستری ویندوز هم فکر نمی کنم کار عملیی باشه حداقل برای من که جالب نیست.
لطفا یه را حل دیگه پیشنهاد کنی.
متشکرم

ایران ویج
شنبه 19 مهر 1382, 10:30 صبح
شما هر چه دوستان دیگه گفتن رو میگی نمیخوایی انجام بدی و فقط راه حل دیگه میخوایی ؟
خوب منهم یه راه حل میگم شاید قابل استفاده باشه اگه نبود بگو.
شما میتونی یه فایل متنی درست کنی و اونو واسه اینکه هرگز توسط هیچ کس حذف نشه همون اول برنامه بازش کنی و هیچ وقت هم نبندی .
و این برنامه باید توسط ویندوز همون اول اجرا بشه (یعنی ویندوز بالا اومد اجراش کنه) و بعدش هر برنامه دیگه میتونه اون فایل رو باز کنه و بخونه ولی هیچ کسی نمیتونه اونو حذف کنه .
البت کد کردن فراموش نشه.

Peyman_Ranjbar
یک شنبه 25 مرداد 1383, 04:43 صبح
بهترین راه برای ذخیره پسورد decode کردن وذخیره آن روی یک فایل و backup اون پسورد هم به وسیله یک الگوریتم decode بشه و تو رجیستری ذخیره کنی وهر دفعه اونا رو update کنی

rezaei manesh
یک شنبه 11 اردیبهشت 1384, 08:47 صبح
سلام
حالا چه طوری کد کنیم و چه طوری دی کد کنیم
تیکه برنامه اگه دارین بزارین ممنون می شیم
منم هم از روش بانک اطلاعاتی استفاده می کنم
::نوشتن:: :گیج:

یاشار
یک شنبه 11 اردیبهشت 1384, 10:04 صبح
با اجازه بزرگ‌تر ها بعله،

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

:wink:

fotrosi
پنج شنبه 05 خرداد 1384, 03:05 صبح
با سلام
به نظر من استفاده از فایلهای باینری خیلی بهتره.
من خودم با دستور type در vb6 و structure در دات نت یه ساختار برای نام کاربر و پسورد ایجاد می کنم و در نتیجه به هر تعداد کاربر می تونم پسورد بدهم.
در ضمن پسورد رو code می کنم که اغلب یه ترکیبی با عملگر xor می سازم.
بعد هم اونو در یک فایل باینری با پسوند dll در کنار فایل اجرایی قرار می دم و اگر اون فایل در هنگام اجرای برنامه نباشه برنامه هم اجرا نمیشه.

Hamedm
جمعه 06 خرداد 1384, 17:39 عصر
سلام

VB.NET یک کلاس برای Hash کردن داره. از این کلاس استفاده کن. بعد کد Hash شده رو ذخیره کن. برای ورود بعدی هم اول کد رو بگیر بعد Hash کن و با کد Hash شده در DB مقایسه کن.

در پناه حق موفق باشید و پرتوان

hadi2345
جمعه 06 خرداد 1384, 18:33 عصر
با سلام .
آقا حامد میشه بیشتر راهنمایی بفرمایید . یه کدی برنامه ای ....... :embr:

HO457
جمعه 06 خرداد 1384, 18:56 عصر
به نظر من اگه از رجیستری و به صورت کد شده استفاده شه بهتره، چون با فایل خیلی درسر داره، من یه بار اومدم با فایل بنویسم پیرم در اومد، دست آخر هم چیز درستی از آب در نیومد

meandyouwith2003
شنبه 07 خرداد 1384, 15:29 عصر
من این برنامه رو نوشته بودم ، یکبارم توی سایت گذاشته بودم
امیدوارم که به کارت بیاد
موفق باشی :sunglass:

null
شنبه 07 خرداد 1384, 22:14 عصر
با سلام
به نظر من بهترین روش همونیه که آقا حامد گفت
شما می تونید پسوردهاتون رو همون تور که بقیه بچه ها گفتن توی یه Dll ذخیره کنی
و بعد اون Dll رو Hash کنی و توی رجیستر ذخیره کنی و هر دفعه که برنامه بار گزاری شد
او Dll رو Hash کن و با مقدار قبلی که توی رجیستر هست مقایسه کن اگر فرق کرده بود یعنی اینه که کسی اون Dll رو دستکاری کرده
در مورد Hash هم با اجازه آقا حامد هم باید بگم که روش برای تولید یک چکیده
از یک پیام است ( Message Digest ) که این پیام می تواند یک کلمه ، یک عدد ، یک جمله ، یک کتاب چند صد صفحه ای ، یک فایل و ... . است
که مثل اثر انگشت می مونه یعنی هیچ وقت Hash دوتا فایل شبیه هم نیست برای اطلاعات بیشتر می تونی یه سر به بخش رمز نگاری داده ها بزنی