Many firms require job applicants to tell them either how much money they're making at their current jobs, or how much they want to make at the job they're interviewing for. This is becoming more common, as more companies use web application forms that refuse to accept an application until the "current salary" or "salary requirements" box is filled in with a number.
My view is that the company knows what the job is worth, and the applicant does not, so the company should make an offer that gives them some profit per employee. The company also knows what the cost of living is in the job's location better than the applicant does.
Fair market negotiations should be informationally symmetric. I think salary negotiation is already asymmetric in the company's favor; job values probably have higher variance than salaries. Also, the company is closer to being a monopoly than the employee is. (That's why they can even get away with demanding the employee rather than the company name the first figure.) Fairness would mean moving in the opposite direction, not having the employee disclose his/her requirements or salary, but having the company disclose their books.
This is especially true for government contractors, where the employee is being hired to fill in one slot on an already-approved contract, which has an exact dollar amount attached to it. The contractor has already told the government they are going to pay the person who fills this slot $X; it seems fair to me for them to list that on the job advertisement and pay that person $X. 
There's a problem with that, though: The company won't be able to fill some jobs at the advertised price. Supply meets demand eventually, but not quickly enough for the contract. The company needs to lowball some employees so that they can hire people at inflated wages to fill the slots that are hard to fill just by bad luck, and still make a profit.
If I don't especially want a job, I'll either give a high figure or walk away if they insist I give my salary requirements before they name a range. It lets me indulge in a gratifying pretense of morality. But I wouldn't call the company immoral.
I do call the second case "immoral" : requiring an employee to disclose their current salary. The only reason I can think of for a company to require your current salary is to circumvent market mechanisms for establishing salaries. Specifying a salary requirement would satisfy any other purpose. The practice locks people into career salary trajectories, preventing market mechanisms from restoring fairness. Disclosing salary therefore defects against all other applicants, and lowers salaries overall, even if your salary is high.
What do you think? If you were applying for a job that you wanted, and the company said "You must give us proof of your current or most-recent salary or we will not give you an interview," what would you do? (A poll is in a comment below.)
 The real money in government contracting is made by the companies--I don't even remember their names; they're not household words--that are authorized to contract out their employees to the government. (I don't mean firms like SAIC or Raytheon that do work in-house.) When I got job offers from the Naval Research Labs and from NIH, they told me to apply to one of these companies and tell them that the NRL / NIH agency wanted to hire me. The company would list me as an employee and then hire me back to the agency, maybe without ever seeing me. The company would do nothing except satisfy the legal requirements for me to be hired for a contract that they didn't even know existed, and for that they charge the agency 50-100% of the job's salary on an ongoing basis.
 More precisely, something workers should refuse to tolerate and should unite against.