Always do your research on similar positions at the same company or different companies through a site like glassdoor.com before even negotiating. You should not be going in blind. Also do research on how much people are making at a role that is similar to yours in terms of work / title / experience. Remember that if there are 2 same positions at a company or even in a department or a team, difference between their salaries could be big.
If you're asked to divulge salary history, don't tip your hand. I've made this mistake a couple of times and I have regretted it / having had to settle for a lower salary. If insist on you giving them a number, quote a number that's 10-15% higher than your annual salary (Have to be careful of the company not finding out your current salary through some other means).
Always tell them about the value you bring to their organization and your experience and that you deserve this much $ amount because of how much the future company will benefit from your skills. Talk about positive recommendations & performance reviews, performance bonuses, awards & accolades you've earned at your current/ past jobs or at school. Do not bring in a comparative number (this company is offering me this much) unless you really need to as it sort of casts a negative impression about you being all about money. Potray how highly you're interested in the position but you feel that the offer is on a conservative side as far as the market rate goes.
If they cannot offer a higher $$$ figure, and you really like the profile, you can negotiate better benefits like full health coverage vs. partial, higher # of vacation days (some companies allow you to cash out some vacation days at the end of the year), commuter benefits, etc.
Just be confident and do not hesitate to ask for more (as long as it's realistic and comparable to the going rate). Also, rehearse the negotiation with a friend or just simulate the conversation in your mind before you actually do the talking with the hiring manager.
Disclaimer; Some of this might not be right. Please feel free to correct any erroneous statements I've made. :)