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