PDA

View Full Version : رمز کردن کلمه رمز



موسوی
سه شنبه 13 آبان 1382, 20:55 عصر
با سلام
من میخوام در برنامه ام از یک تیبل در دیتابیس استفاده کنم که نام کاربران وکلمه عبور آنها در آن تیبل (Table) ذخیره شود اما بصورت رمز شده
لطفا در این مورد (رمز گذاری ورمز گشائی در دلفی) من رو راهنمائی کنید

Mashatan
سه شنبه 13 آبان 1382, 21:12 عصر
یکی قوی ترین Component های این کار DCPcrypt Cryptographic Component Library
با Source هست
http://www.cityinthesky.co.uk/cryptography.html

omidsm
جمعه 16 آبان 1382, 11:54 صبح
من از یک الگوریتم خیلی ساده استفاده می کنم

تک تک کاراکتر ها را با یک عدد یا کاراکتر XOR می کنم و موقع برگرداندن آنها با همان عددیا کاراکتر XOR می کنم

و تا زمانی که کسی عددیا کاراکتر مارا نداند نمی تواند رمز گشائی کند :wink:

مهدی کرامتی
جمعه 16 آبان 1382, 12:02 عصر
تک تک کاراکتر ها را با یک عدد یا کاراکتر XOR می کنم و موقع برگرداندن آنها با همان عددیا کاراکتر XOR می کنم
و تا زمانی که کسی عددیا کاراکتر مارا نداند نمی تواند رمز گشائی کند
خوب اشکال این روش اینستکه اگر Hacker یکی از رمزهای کاربران شما را بداند میتواند با روش BruteForce براحتی بفهمد که کاراکتر و الگوی رمزگذاری شما چه بوده است.

SReza1
جمعه 16 آبان 1382, 18:25 عصر
سلام
یک روش ساده همون xor است که دیگه همه میدوند!!
یمک اگه بخواهی از ساده گی در بیاری اینه که با یک الگویی که تو میدونی xor کنی!!
مثلا کراکتر اول رو با کارکتر اوا و دوم رو با دوم و اگه به ته رشته رسیدی از اول باید xor کنی مثلا بیا به کلمه this is test Xor کن
در میتونی با محل کراکتر هم xor کنی!!
کلی روش در این باره هست که میتونی امتحان کنی اینم یه روشه! :oops:

مهدی کرامتی
جمعه 16 آبان 1382, 19:31 عصر
بهترین روش برای کد کردن Password استفاده از MD5 Hash است، زیرا یک روش برگشت ناپذیر میباشد.

said ali
شنبه 17 آبان 1382, 15:33 عصر
با سلام
ببخشید :!: :!: :!: :!: :!: :!:
برگشت ناپذیر رو که نمیشه استفاده کرد میشه بیشتر توضیح بدین. :shock: :shock: :shock: :shock:

Mashatan
شنبه 17 آبان 1382, 16:01 عصر
با سلام
ببخشید :!: :!: :!: :!: :!: :!:
برگشت ناپذیر رو که نمیشه استفاده کرد میشه بیشتر توضیح بدین. :shock: :shock: :shock: :shock:

MD5 یک نوع Hash ه 128 بیتی هست و هم سرعتش زیاده و هم درصد تکرارش خیلی خیلی کمه !

بدین صورت Password رو در Database به صورت Hash شده قرار میده و هر بار که User پسورد رو وارد میکنه اول Password رو Hash میکنه بعد با Database چک میکنه :)

اینکه میگن برگشت ناپذیره منظور اینکه چون Hash از یک رشته میتونه (که میتونه یک Password باشه ) یک رشته شناسایی درست کنه برای همین تنها راه بدست آوردنش آزمایش و خطا هست :wink:

Hash با Cipher کردن فرق میکنه !
ویندوز NT از این روش برای ذخیره استفاده میکنه

البته روشهای دیگه وجود داره مثل


Haval 128- 256 bits
MD4 128 bits
MD5 128 bits
RipeMD-128 128 bits
RipeMD-160 160 bits
SHA-1 160 bits
SHA-256 256 bits
SHA-384 384 bits
SHA-512 512 bits
Tiger 192 bits
ارادتمند
مشاطان

said ali
سه شنبه 20 آبان 1382, 15:59 عصر
با سلام
جون من یه چیزی بنویس که من که هیچی کامپیوتر نخوندم و دانشجوی مکانیکم حالیم بشه :
Hash :!: :!: :!: :!: :!: cipher :!: :!: :!: :!: :!: :?: :?: :?: :?:
قربانت
با تشکر

jirjirakk
سه شنبه 20 آبان 1382, 16:28 عصر
علی آقا تقریبا توضیح دادن هم Cipher و هم Hash رو :?:

مهدی کرامتی
سه شنبه 20 آبان 1382, 16:48 عصر
مکانیسم کار بدین صورت است:

دفعه اولی که کاربر Password را برای نام کاربری‌اش مشخص میکند:
1- Password بصورت یک String از کاربر دریافت میشود.
2- String دریافت شده با استفاده از متد MD5 Hash بصورت رمز (Encrypt) درآورده میشود.
3- عبارت Encrypt شده در Database ذخیره میشود.

وقتی قرار است Password چک شود:
1- Password بصورت String از کاربر دریافت میشود.
2- String دریافت شده با استفاده از متد MD5 Hash بصورت رمز (Encrypt) در آورده میشود.
3- String ای که اکنون Encrypt شده است با String ای که قبلا بعنوان Password در Database ذخیره شده بود مقایسه میشود.

این یک نمونه کلمه عبور (Password) بصورت یک String عادی است:

mb12ops13x
این عبارت پس از Encrypt شدن با استفاده از متد MD5 Hash بصورت زیر در خواهد آمد:

44D46D2FCBC527541B1CEFA920699FC0

نمونه کد تبدیل یک String به MD5 Hash :

var
Buffer : String;
begin
Buffer := edtSource.Text + #0;
edtResult.Text := GetMD5(@Buffer[1], Length(Buffer) - 1);
end;
نمونه برنامه استفاده از متد MD5 Hash‌ بصورت یک فایل Zip ضمیمه این پست شده است.

Mashatan
سه شنبه 20 آبان 1382, 17:03 عصر
با سلام
جون من یه چیزی بنویس که من که هیچی کامپیوتر نخوندم و دانشجوی مکانیکم حالیم بشه :
Hash :!: :!: :!: :!: :!: cipher :!: :!: :!: :!: :!: :?: :?: :?: :?:
قربانت
با تشکر

بخوام کتابی شو بگم خیلی گیج مشی ، ببینید Hash از یک رشته ، یک رشته منحصر به فرد درست میکنه ، یعنی رشته درست میکنه که هیچ ترکیب دیگه نمیتونه این رشته رو به وجود بیاره !!
برای مثال اینجا رو نگاه کنید http://securityresponse.symantec.com/avcenter/download/pages/US-N95.html
شما اونجا میبینید که برای فایل یک Hash MD5 گذاشتند در حقیقت با این Hash میتونید از سلامت Download خودتون مطمئن بشید
در حقیقت Hash خود رشته اصلی نیست بلکه اثر انگشت رشته هست (دیگه از این ساده تر نمیتونم بگم )

ولی در مورد Chipher قضیه فرق میکنه این رمز کردن هست ،
برای Encrypt کرد شما باید رشته اصلی + کلید = رشته رمز شده !
برای Decrypt کردن رشته رمز شده + کلید = رشته اصلی

و اشکالش برای این کار اینکه شما اولا احتیاج به کلید دارید بعد اینکه با بدست آوردن کلید همه پسورد ها لو میره !

حالا در چک کردن پسورد برای اینکه قابل بازگشت نباشه و چون فقط درستی و نادرستی مهم هست ، محتوای پسورد رو رمز نمیکنن بلکه از Hash بجای خود Password استفاده میکنن ، برای همین هست که در NT شما نمیتونید Password رو ببینید د ولی میتونید عوض کنید .


ارادتمند
مشاطان

phantasm
سه شنبه 20 آبان 1382, 18:11 عصر
البته فکر کنم تنها اشکالی که روش hash کردن داره اینه که خود پسوورد hash شده لو بره.
در این صورت چون کپی برابر اصله میشه از اون استفاده کرد :roll: (اگه اشتباه میگم لطفا
راهنماییم کنید) :roll:

Mashatan
سه شنبه 20 آبان 1382, 19:46 عصر
البته فکر کنم تنها اشکالی که روش hash کردن داره اینه که خود پسوورد hash شده لو بره.
در این صورت چون کپی برابر اصله میشه از اون استفاده کرد :roll: (اگه اشتباه میگم لطفا
راهنماییم کنید) :roll:

نه دیگه :)
الگوریتم ورود Password بدین صورت هست که اول پسورد Hash میشه بعد مقایسه میشه :) شما اگر در جای که برای ورودی Password هست Hash رو قرار بدید اول این Hash که وارد کردید دوباره Hash میشه بعد مقایسه میشه که مسلما با اونی که در Database است برابر نخواهد بود ! ;)

ارادتمند
مشاطان

phantasm
سه شنبه 20 آبان 1382, 21:06 عصر
البته منظور من این نبود چون خودم این رو میدونم :wink:
منظورم این بود که ما یه پسوورد خودمون میسازیم و سیستم اونو hash میکنه و ذخیره میکنه
بعد اگه بشه(که فکر کنم شدنی باشه)به پسورد جدید که یه جایی ذخیره شده(مثلا کندوی sam یا security که به هر حال مثل همه فایلها روی hard ذخیره میشن)و پسوورد قبلی که اونم hash شده دسترسی پیدا کنیم .واونوقت جای اون دوتا رو با هم عوض کنیم(اینجاشو دیگه نمیدونم عملی هست یا نه)
میتونیم حالشو ببریم :mrgreen:
و هر بار سیستم ازمون password خواست ما اونی که خودمون ساختیم وارد میکنیم و با توجه به گفته شما چون hash اون یکتا ست
دیگه مشکلی پیش نمیاد :twisted: :twisted:


ارادتمند
phantasm یه جوجه هکربا ایده های مالیخولیایی

said ali
شنبه 24 آبان 1382, 14:33 عصر
با سلام
نماز و روزتون قبول
اقا خیلی ممنون و با تشکر فراوان از توضیحاتتون همچنین تشکر مضاعف از اقای کرامتی برای مثال و همچنین از اقای مشاطان برای ادرس سایت.
:roll: :roll: :roll:
یه سوال میتونه Hash شده یه چیزی خودش باشه؟؟ :?: :?:
در مورد سوال اقای phantasm میشود این کار رو کرد ؟؟ :?: :?: :twisted: :twisted: :twisted: :twisted: :twisted:

Mashatan
شنبه 24 آبان 1382, 17:34 عصر
میتونیم حالشو ببریم :mrgreen:
و هر بار سیستم ازمون password خواست ما اونی که خودمون ساختیم وارد میکنیم و با توجه به گفته شما چون hash اون یکتا ست
دیگه مشکلی پیش نمیاد :twisted: :twisted:


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

این چیزی که شما ازش نام بردید اشکال الگوریتم و Security هست که باید راه نفوز به بانک اطلاعاتی رو ببندید ، از Client که این امکان وجود نداره از Server هم خیلی مشکل هست

البته این طور نیست که راهی برای جلوگیریش وجود نداشته باشه میشه با روشهای Polymorphic حالش رو گرفت 8)

پ.ن: راستش رو بخوای برنامه که Security ش اینقدر ضعیف باشه که اجازه بده بتونید بانک اطلاعاتی شو رو هر کسی بخونه همون بهتر که Hack بشه :lol:

ارادتمند
مشاطان