Minoru
> md5(sha1($pass).md5($pass).sha1($pass))
ух ты! Первый уровень снимается с помощью rainbow table, причём мы заранее знаем размер входной строки. Дальше отрасываем все строки, у которых первые 160 бит не совпадают с последними. Берём md5 из серединки, снова rainbow table и проверка по sha1 (спасибо дизайнерам «хэша»!) То есть по сути sha1 не только не усложняет, но даже упрощает взлом, и при этом sha1 взламывать не надо