PDA

View Full Version : حرفه ای: مشکل ذخیره اصلاعات با الگوریتم md5



thinkdiff
دوشنبه 16 دی 1392, 20:37 عصر
با سلام
من در بانکم به طور دستی یک پسورد رو با مقدار "123" و الگوریتم md5 ذخیره کردم و خروجیش این بود:
202cb962ac59075b964b07152d234b
و با استفاده از کد هام هم مقدار ورودی در textbox رو با md5 کد کردم و باهاش مقایسه کردم و ارور داد.بعد فهمیدم که کدم از همین 123 اینو تولید کرده :
202cb962ac59075b964b07152d234b70
اون 70 رو به آخرش اضافه کرده.کلا برای هر مقداری که میدم،کد من دو رقم به دلخواه خودش به آخر رشته اضافه میکنه و با مقدار داخل بانک مطابقت نداره ..!
حالا من میخوام ببینم چرا این کار رو میکنه ؟می خوام اطلاعات وارده رو با بانکم مقایسه کنم اینطوری نمیشه

اینم کدم :

<?php
require 'header.php';
require 'chek.php';

if(isset($_POST['user'])&&isset($_POST['pass'])){
$user = $_POST['user'];
$pass = $_POST['pass'];
echo $hash_pass = md5($_POST['pass']);
if(!empty($user)&&!empty($pass)){
$query = "SELECT `username` ,`password` FROM `users` WHERE `username`='".$user."' AND `password`='".$hash_pass."'";
if($query_run=mysql_query($query)){
$query_num = mysql_num_rows($query_run);
if($query_num == 0){
echo ' invalid entered information';
}else{
echo 'ok';
}
}
}else{
echo 'empty';
}
}else{
echo 'donnt set';
}
?>

ممنون میشم راهنماییم کنید

trasilver
دوشنبه 16 دی 1392, 20:54 عصر
کدی که پسورد رو وارد دیتابیس می کنه رو هم قرار بدید.

thacker
دوشنبه 16 دی 1392, 20:54 عصر
توی دیتابیس ، ستون مربوط به رمز رو varchar(32) تنظیم کنید...

2undercover
دوشنبه 16 دی 1392, 21:24 عصر
توی دیتابیس ، ستون مربوط به رمز رو varchar(32) تنظیم کنید...

البته چون طول مقدار همیشه 32 هست، پیشنهاد میشه که از نوع CHAR به جاش استفاده بشه!

thinkdiff
سه شنبه 17 دی 1392, 09:03 صبح
بسیار از متخصصین عزیز ممنونم ایراد این بود که من VARCHAR 30 قرار داده بودم و باید VARCHAR 32 قرار میدادم
ممنون از همگی به خصوص چناب thacker :لبخندساده:

metal gear solid 4
سه شنبه 17 دی 1392, 12:38 عصر
هرگز مقادیری که قراره هش کنید رو بدون استفاده از یک متن کمکی هش نکنید.
مثال:


echo md5("123"); // 202cb962ac59075b964b07152d234b

خب این مقدار قابل برگشت نیست. اما کسی که یک بانک اطلاعاتی از داده های هش شده داشته باشه مسلماً 123 رو هم داره. و رشته ی هش شده ی شما به راحتی رمز گشایی میشه.

همیشه از یک عبارت کمکی برای هش کردن استفاده کنید.
مثال:


$salt = 'A Secret String Here!!';
echo md5("123" . $salt );

trasilver
سه شنبه 17 دی 1392, 12:45 عصر
من میام اول عدد باشه یا هرچی باشه دوبار با base64 انکد می کنم بعد اون رشته base64 شده رو به یک رشته md5 تبدیل می کنم :لبخندساده:
مرد می خوام کرکش کنه :لبخند:

thinkdiff
پنج شنبه 19 دی 1392, 10:09 صبح
راهنمایی خیلی خیلی خوبی بود اما سوال من اینه که خوب وقتی بخوام از بانک برشگردونم باید او $salt رو ازش حذف کنم و بعد نمایشش بدم درسته؟
اگر دسته آیا باید با substr این کار رو انجام بدم؟