This topic has been debated before (the hacker definition controversy) but I am strongly in favor of using different names for people who use computers for good or evil (or at least mischief). Unfortunately the press has tended to use hackers as a term to describe both types of people and that causes not only confusion about what category people are in but also what should be understood as good and bad computer related behavior.
Here are some workable definitions based on the hackers jargon file.
Hacker
1. A person who enjoys exploring the details of programmable systems and how to stretch their capabilities, as opposed to most users, who prefer to learn only the minimum necessary. RFC1392, the Internet Users’ Glossary, usefully amplifies this as: A person who delights in having an intimate understanding of the internal workings of a system, computers and computer networks in particular.
2. One who programs enthusiastically (even obsessively) or who enjoys programming rather than just theorizing about programming.
3. A person capable of appreciating hack value.
4. A person who is good at programming quickly.
5. An expert at a particular program, or one who frequently does work using it or on it; as in “a Unix hacker”. (Definitions 1 through 5 are correlated, and people who fit them congregate.)
6. An expert or enthusiast of any kind. One might be an astronomy hacker, for example.
7. One who enjoys the intellectual challenge of creatively overcoming or circumventing limitations.
Cracker
1. Destructive computer users.
2. A person who uses their knowledge of vulnerabilities and exploits for private gain, rather than revealing them either to the general public or the manufacturer for correction.