Do groups, rings and fields have practical applications in CS? If so, what are some? This is ONE thing about my undergraduate studies in computer science that I haven't been able to 'link' in my real life (academic and professional). Almost everything I studied I've observed be applied (directly or indirectly) or has given me Aha! moments understanding the principles behind the applications. 
Groups, Rings and Fields have always eluded me. I always thought they were useful (instinctively) but failed to see where/how. Are they just theoretical concepts without practical applications? I hope not. So what are their applications, especially in the field of computer science. No matter how arcane/remote their use I still want to know.

I think the most succinct answer might be that groups are very handy at encoding information about symmetry, which is something ubiquitous in mathematics and the sciences (I can't speak for computer science). More importantly, groups encode the structure of symmetries without having to bother with looking at the explicit symmetries themselves. That's just to say that most of the time it's not important to know what the symmetries actually are but rather how they interact with each other.
For example, if you look at the usual group D4, represented as the symmetries of a square, it's not important that such and such element of the group represents such and such action on the square; instead it captures exactly how the different actions on the square react with each other. The same concept applies very similarly in more advanced contexts, where groups can model the symmetries of a crystal or of quantum mechanical systems or of more complicated mathematical structures.
