md5 можно расшифровать,из-за колизий(хотя на это уйдет время).
Нельзя его расшифровать. Весь прикол хэшей в том, что ты никогда не можешь точно сказать исходную строку. Например если у тебя хэш это 1 если в строке есть 'a', и 0 в иных случаях - то ты не можешь из хэша 1 получить точную строку, ведь это может быть "a", "aa" или "darwin blin vernis' v ro". То же и с md5 - ты можешь только подобрать строку, подходящую под хэш. Но их бесконечно много. Поэтому md5 бесполезно использовать не только для хранения паролей (легко найти что-то, что имеет тот же md5, что и оригинальный пароль и ты получишь к чему-нибудь доступ), но и для хранения чего-то, что нужно расшифровать, так как одному хэшу в соответствие поставлено бесконечное количество строк.
А теперь ТСу - не уважаемый
DarwinRoot, шифр Цезаря (а именно так называется шифр, который ты реализовал), а тем более с классическим ключом 3 и шифрованием только английских букв нижнего регистра имеет криптостойкость близкую к 0. Такие шифры я на олимпиадах по криптографии ломал без использования даже ручки и бумажки. Да и скорость твоего алгоритма будет меньше скорости даже обычного ксор шифрования, которое к тому же куда более криптостойкое (даже более криптостойкое чем, например, шифр простой замены, частным случаем которого является твой вышеупомянутый шифр Цезаря).