md5 ไม่ใช่การเข้ารหัสนะครับ มันคือการทำ checksum (ผลรวมเป็น hash) ของข้อมูลที่ป้อนเข้าไป
ซึ่งการทำ checksum เนี่ย มันคือการ " บวก ลบ คูณ หาร " ข้อมูลที่ป้อนเข้าไปให้ออกมาเป็นเลขชุดนึงที่มีความยาวแน่นอน
และที่บอกว่ามันถอดรหัสไม่ได้ สาเหตุเพราะ ถ้าถามคุณว่า เลข 100000 เกิดจากเลขอะไรมาบวกกันบ้าง
โดยไม่บอกว่ามีเลขกี่ชุดมาบวกกัน จะมีใครตอบได้บ้างมั้ยครับว่าคำตอบคืออะไร? นี่คือหลักการของการทำ checksum ครับ
เพราะงั้น md5 ถอดรหัสไม่ได้แน่นอน แต่สามารถทำให้รหัสซ้ำกันได้ โดยที่ข้อมูลไม่ต้องเหมือนกัน
(มีคนเจอช่องโหว่นี้มาแล้ว)
ตัวที่จะเอามาใช้แทน md5 ได้ก็คือ sha1 ครับ
ขอข่าวนี้ได้มั้ยครับ ว่ามีคนเจอช่องโหว่ แล้วอะครับ
คือถ้ามีคนเจอช่องโหว่จริง MD5 จะไม่ได้รับการยอมรับเลยนะครับ
เพราะมันมีโอกาสผิดพลาด ถึงแม้จะ 1 ในล้านก็ตาม
ถ้าเจอช่องโหว่จริงพวกนักคณิตศาสตร์ที่พูสูจน์อัลกอร์พวกนี้ ก็หน้าแต่กกันหมดเลยอะดิ
คุณไม่ต้องไปกังวลเรื่องการยอมรับอะไรกับ md5 มากหรอกครับ
http://php.net/manual/en/function.md5.php 
md5
http://www.php.net/manual/en/function.sha1.php 
sha1
อย่างที่คุณ icez ว่ามามันคือการคำณวนจริงๆ (Calculate)
ลำพังใช้แค่ md5 ทีเดียว คุณอาจหนาวๆร้อนๆได้ แต่ถ้าคุณเอามันมาผสมกัน เช่นเอาคีย์หลักของเว็บผสมลงไป อาจจะทำหลายๆชั้น ตย.
md5(md5($key.":".$password.$key));
ผลลัพธ์ของรหัสผ่าน abcd ก็ออกมาแตกต่างจาก md5 รอบเดียวธรรมดาๆแล้ว
แล้วยิ่งถ้าเอา sha1 ผสมเข้าไปด้วย ยิ่งดูยากยุ่งเหยิงแกะไม่ออกเข้าไปใหญ่
อันนี้ตอบโจทย์สำหรับคนที่กลัวการเจอช่องโหว่รหัสซ้ำนะครับ ถ้าใส่คีย์ซ้ำๆซ้อนๆ จัดตำแหน่งเอาเอง อาจใช้ sha1 มาช่วยอีกทีสองที เก่งยังไงก็แกะยาก
ทีนี้มันมีอีกทางหนึ่งที่ผมว่าคุณควรไปกังวลตรงนั้นมากกว่า นั่นคือการสุ่มเดารหัสผ่าน (
ขออภัยถ้ารู้แล้วครับ)
http://en.wikipedia.org/wiki/Brute-force_attack 
(brute force attack)
ซึ่งคนร้ายไม่ต้องมานั่งแฮค server เพื่อเอารหัสไปเทียบกับ database key อะไรนั่นเลย ใช้โปรแกรมสุ่มไปเรื่อยๆจนกว่าจะเจอ
คนที่จะโดนด้วยวิธีนี้ก็คือคนตั้งรหัสผ่านแบบง่ายๆ
ทางช่วยป้องกันก็คือนับจำนวนครั้งที่ log in ผิด เช่นเกิน 3 ครั้งให้ captcha โผล่มาและบังคับเช็ค captcha & ถ้าเกิน 10 ครั้งให้รอครึ่งชั่วโมง เป็นต้น