A quote from the best.
The media has tried to intermix the two, and too many people don't really know the difference between the two...
Originally Posted by Jon "maddog" Hall
A hacker is a fine name to be called, it is someone who really knows programming, has studied it, enjoys doing it, and shows exceptional skill at solving difficult problems with elegant code. Usually that code is relatively short, what we call a quick hack.
A cracker is someone that breaks into other people's system. There are two main types of crackers, those who are extermely skilled and often very hard to detect, and those who are less skilled often relying on techniques developed by others. Often these less skilled cracker are called script kiddies.
Cracker are someone looking for financial gain when breaking into some one elses machine.