I am not aware of employers having any right to ask you your salary. They ask for several reasons: to help themselves pick a negotiating position, to confirm that their ranges are aligned with the market place, and to intimidate the job seeker either to strengthen their negotiating position or just because they are not emotionally mature). You always have the right not to disclose information about yourself, but if you lie about it in writing they can fire you for it. I always opt for letting some one know it's none of their business rather than lying.
There are some great books on negotiation ("Getting to Yes" is a classic). The best approach seems to be to always state a range, rather than a point estimate, and mention that where you fall within that range depending on benefits. Remember (and it doesn't hurt to remind your interviewer that there are some companies with very rich benefits out there such as dollar-to-dollar matching on a 401k, full family medical and dental, on-site day care, full tuition reimbursement, training programs, etc. I've used the following:
1. (slightly surprised and offended look): "I never disclose my salary." Why are you asking?
2. "I'm in the A to C range. I would need B to D to take this position, depending on benefits. Would you like to discuss benefits first?"
3. "I'm in the market range for this title, B to D. What is your company's range? Does your HR dept base the range on market surveys?"
4. "I'm looking for something in the range of B to D. Does that work for you?" (this works best at the very beginning of a conversation, before they ask my salary).
You need to see yourself as an equal in the negotiating process. If you use the right tone, these questions will make you seem like a professional who is savvy about the job market and has self-confidence and realistic expectations, rather than a pushy, nosy, or naive wanna-be. One other word about ranges, I never state the bottom of the range as below what I'll feel grateful to go to work for each morning. It's too tough for me to show up for a job if I'm not feeling gratitude.