همیشه رمزنگاری پسوردها در برنامههای تحت وب اهمیت بسیار بالایی داره. از اونجا که بیشتر کاربران عادت دارن در تمام سایتها پسوردهای یکی داشته باشن وقتی دیتابیس یک سایت مورد هک واقع بشه و دادههای اون استخراج بشه براحتی با داشتن فیلدهای نام کاربری و پسورد میشه به تمام اطلاعات دیگر این کاربر حتی در بعضی اوقات به ایمیلش هم دسترسی داشت.
حالا نمیخوام فلسفه پسورد و امنیت اطلاعات رو پیش بکشم بحثم روی کم کرد فشار سرور به کمک توابع داخلی و توکار هست. واقعا تعجب میکنم با این که زبانهای برنامهنویسی به مرور زمان توابع و امکانات جدید بهشون اضافه میشه و حتی در دیتابیسها هم شاهد این موضوع هستیم باز هم افزادی هستن که سرور رو مشغول کارهای پیشپا افتاد و الگوریتمهای سنگین میکنن. مثلا یه برنامهنویس میاد یک کلاس برای هش کردن پسوردها مینویسه که توش از تمام توابع(از sha و md5 گرفته تا rand و چیرهای دیگه) استفاده کرده تا کار هش کردن پسورد رو انجام بده. اولا باید گفت درصد رمز نگاری و استفاده از الگوریتمهای پیشرفته کاملا وابسته با پروژه و شرایط کارفرما داره. مثلا رمز نگاری یه فروشگاه الکترونیکی که هر کاربر قراره مبلغی از حسابش کم بشه و توی بودجه اکانتش درون سایت قرار بگیره با یه سایت شخصی ساده کاملا فرق داره. در فروشگاه اگر اکانتش لو بره امکان داره پولی رو از حسابش برداشت شده توسط شخص دیگری که اکانت رو هک کرده به حساب دیگری واریز بشه یا خرید انجام بگیره در صورتی که خود صاحب اصلی اکانت اصلا اطلاع نداشته.
در php تابع crypt رو خوب یادبگیرید که امکانات زیادی مثل salt رو هم داره. ولی در دیتابیس mysql تابع ENCRYPT کار مشابه crypt رو انجام میده.
برای ذخیره پسورد بصورت هش شده دقت داشته باشید شما دیگه به اصل پسورد دسترسی ندارید و فقط در لحظه لاگین کلمه وراد شده هش میشه و با کلمه هش شده دیتابیس مورد مقایسه قرار میگیره و این امنیت رو بالا میبره از اونجا که اگر دیتابیس خودتون رو هم کاملا کپی کنید به هکر بدید دیگه به هیچ عنوان به پسوردها دسترسی نداره.
استفاده از این تابع بصورت زیر هست:
INSERT INTO
`tbl_user`(`username`,`email`,`password`)
VALUES
('seifzadeh','mehrdad@gmail.com',ENCRYPT('1234'));