PDA

View Full Version : رمزنگاری پسورد و رمزگشایی



zahra-j
جمعه 09 آبان 1393, 19:51 عصر
سلام
پسورد را به این صورت رمزنگاری کردم اکنون می خواهم در قسمت فراموش کردن پسورد اونو برای کاربر بفرستم در رمزگشایی اون مشکل دارم ممنون مشم راهنمایی کنید؟

$salt='jhfd$ctg%fxdf4$3BDsn%xhgdf|vhv%#';
$pass = sha1(md5($pass.$salt));

bagherok
جمعه 09 آبان 1393, 20:20 عصر
امکان رمزگشایی نیست
باید یه پسورد جدید از کاربربگیرید.

peymang
جمعه 09 آبان 1393, 20:22 عصر
1. اولا این دوتا الگوریتم رو نمیشه رمز گشایی کرد
ولی می تونید کاربر رو محدود به یک سری حروف و یک طول پسورد کنید
و بعد داخل یک جدول تمامی حالاتی که یک رشته + حالت رمز شدن اونها داره رو ذخیره کنیم ( که اون موقع هش کردن پسورد فایده ای نداره)

2. وقتی کاربر میخواد پسورد رو تغییر بده یک کد تولید کنیم و اونو داخل دیتابیس ذخیره کنیم و کد رو به صورت آدرس به کاربر ایمیل کنیم.
بعدش کاربر با اون آدرس می تونه تغییر پسورد بده ( این کار درست تره)

zahra-j
جمعه 09 آبان 1393, 20:33 عصر
پس من از چه الگوریتمی استفاده کنم که برگشت پذیر باشه و امنیت داشته باشد در قسمت فراموش کردن پسورد که پسورد را به کاربر ایمیل می کنند به چه صورت رمزنگاری میکنند؟

peymang
جمعه 09 آبان 1393, 20:52 عصر
<?php

$myVarIWantToEncodeAndDecode='zahra-j';


$key = '#&sdfdfs789fs7d';


$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $myVarIWantToEncodeAndDecode, MCRYPT_MODE_CBC, md5(md5($key))));


$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encoded), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

echo $decoded;




http://stackoverflow.com/questions/15884248/how-to-create-two-way-encode-decode-methods-using-use-specific-key-php

*** اگه می خواید امنیت داشته باشه از همون روش دوم استفاده کنید. ( یعنی ذخیره پسورد هش شده در دیتابیس، و تغییر اون به وسیله ایمیل)

zahra-j
جمعه 09 آبان 1393, 21:39 عصر
در صورت استفاده از روش دوم فقط می توان پسورد را تغییر داد نمی توان که آن را بازیابی کرد؟

peymang
شنبه 10 آبان 1393, 00:10 صبح
بله
هش کردن یعنی اینکه یه متن رو طوری رمز کرد که دیگه نشه اونو دی کد کرد

Unique
شنبه 10 آبان 1393, 02:43 صبح
آقا پیمان شرمنده میپرم وسط بحثت اما چرا حاشیه میری و اصلش را براشون توضیح نمیدین ؟


در صورت استفاده از روش دوم فقط می توان پسورد را تغییر داد نمی توان که آن را بازیابی کرد؟
استفاده از توابعی مثل md5 تولید یک رشته برگشت نا پذیر میکنه و برای ذخیره کلمه عبور هم استفاده میشه ! شما هم نباید بتونید رمز را کشف کنید به ۲ دلیل :

۱ - اگه از روش هش قدرتمندی استفاده کنین (بار ها بحث شده توی انجمن بگردین و پیدا کنین) حتی اگه روزی کل کلمه های عبور database شما هم لو بره امکان برگشتش وجود نداره و از این امن تر نمیشه. اگه مثلا encrypt کنین و کسی کلید شما را بفهمه کل کلمه های عبور مثل حالت plain text لو میره !

۲- حق کاربر هست که شما نتونید کلمه عبوری که توی سیستم میزنه را بازیابی کنید و امنیت در حدی باشه که هیچ کس نتونه ! خیلی ها از کلمه های عبور یکسانی برای ایمیل ، فیس بوک ، توییتر ، کارت بانکی و غیره .... استفاده میکنند و شما با فراهم کردن امکان بازیابی دارین شخص را در معرض مشکلاتی قرار میدین.

راه حل :
در زمان درخواست کلمه عبور جدید ، یک لینک برای کاربر ایمیل کنید تا پس از کلیک بر روی اون لینک خودش بیاد و کلمه عبور جدیدی انتخاب کنه و در واقع بازیابی بشه ! حتی کلمه عبور را به ایمیلش نفرستین که از نظر امنیتی درست نیست و خودتون هم حتی نمیدونین چی انتخاب کرده.

موفق باشین

hamidhassas
شنبه 10 آبان 1393, 12:11 عصر
آقا حرف دوستمون Unique درسته ولی اگه خواستی میتونی کد زیر رو استفاده کنی


http://www.hassas-computer.com/images/images_upload/matlab/amuzesh/PHP_encode_decode.jpg


رمزنگاری و رمز گشایی اطلاعات محرمانه خود ( encode & decode ) در زبان برنامه نویسی PHP (http://www.hassas-computer.ir/preview.php?post=223)