<?php
$password = "Hehe I'm xnohat";
$hashmd5 = md5($password);
$compressedhash = gzdeflate($hashmd5, 9);
$base64encodedhash = base64_encode($compressedhash); // S05OMTY1NkxNszQ1SzFMSTMwSzZONDA2MTFPSU1NNjdWAAA=
//-------------------Kết thúc phần tạo mã hash giả dạng Base64 Encoded------------------
$uncompressedhash = gzinflate(base64_decode($compressed));
echo $uncompressedhash; // MD5 hash nguyên thủy ban đầu
?>
Cái hay ở đây là nó tạo ra tình trạng "obscurity" , khiến kẻ tấn công khi lấy được chuỗi hash của mật khẩu sẽ cứ cố tìm cách Base64_decode cái đoạn có vẻ trông như Base64 Encoded ( S05OMTY1NkxNszQ1SzFMSTMwSzZONDA2MTFPSU1NNjdWAAA= ) để chỉ nhận được "một file nhị phân" (binary) mà không sao tìm ra chuỗi md5 gốc.
Điều này giúp đánh bại ý chí tìm md5 hash để rồi quăng vô một số md5 rainbow table cracker để tìm mật khẩu gốc của các script kiddes ( nhất là khi ở VN tình trạng tấn công SQLi , Local attack đầy nhan nhản )
Bạn thử decode cái đoạn Base64 Encoded trên bằng công cụ online này http://www.opinionatedgeek.com/dotnet/tools/base64decode/ xem sao :D
RFC1951 (http://www.faqs.org/rfcs/rfc1951.html) viết rất rõ về DEFLATE compression algorithm này
$uncompressedhash= gzinflate(base64_decode($compressed));
ReplyDeletecho hỏi $compressed ở đâu ra?
là cái $base64encodedhash chứ còn gì nữa
ReplyDelete