دانشجویان رشته کامپیوتر در دوران تحصیل خود در دروس برنامه نویسی آنقدر درگیر یادگیری در مورد مفاهیم می شوند که شاید مسائل که مربوط به امنیت هست را برای راحتی کار و درگیر نشدن به چزئیات چشم پوشی می کنند. از جمله می توانیم به ذخیره پسورد در database اشاره کنیم. در ادامه راه حل ساده ای را مطرح می کنیم که به راحتی می توانید از آن استفاده کنید تا برنامه قوی تری از نظر امنیت داشته باشید.
در اکثر پروژه ها که نیاز به یک ورودی دارند مسئله username و password پیش می آید که در ساده ترین حالت یک Table خواهد بود که شامل ID,Username,Password است.
من به شخصه در دوران دانشجویی پسورد را به صورت ساده در database ذخیره می کردم البته این را هم در نظر بگیرید که رمز خود database هم مهم است.
در بحث های امنیتی Cryptography hash function ها به کمک ما می آیند که بتوانیم رمزها به صورت hash ذخیره کنیم. از انواع و اقسام و پردازش پشت پرده انواع hash ها صرف نظر می کنیم و کلاسی را طراحی می کنیم که توسط آن بتوانیم پسورد مورد نظر را به صورت پیچیده ای ذخیره کنیم که در صورت لو رفتن رمز database رمز کاربران لو نرود.
در کتابخانه جاوا این عملیات به نحو مطلبوبی پیاده سازی شده است و از آن استفاده کردیم و کلاس زیر را طراحی کردیم.
public class CryptographyHashFunction {
public static final String MD5 = "MD5";
public static final String SHA1 = "SHA-1";
public static final String SHA256 = "SHA-256";
public static final String SHA384 = "SHA-384";
public static final String SHA512 = "SHA-512";
private static MessageDigest messageDigest;
public CryptographyHashFunction(String algorithm) {
try {
messageDigest = MessageDigest.getInstance(algorithm);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
public String crypt(String password) {
byte[] passwordBytes = password.getBytes();
messageDigest.reset();
byte[] digested = messageDigest.digest(passwordBytes);
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < digested.length; i++) {
buffer.append(Integer.toHexString(0xff & digested[i]));
}
return buffer.toString();
}
}
کد فوق برای شما از یک رشته یک رشته hash code تولید می کند و شما می توانید در database به جای پسورد از آن استفاده کنید و در زمان ورود رمز را از کاربر گرفته و مجدد hash code آن را تولید کنید و با hash code موجود در database مقایسه کنید که اگر برابر بودند یعنی رمز به درستی وارد شده است در غیر اینصورت رمز صحیح نیست.
امیدوارم مطلب امروز برای شما مفید بوده باشد.