The current crop of campaign finance law was enacted after the Watergate era when Congress felt the need to pass some sort of law. (Always be very careful when they feel this need; you are about to get screwed.)
It hasn't worked very well, obviously. The main problem now is the soft money and contributions by PACs and Unions. However, I know what should be done to solve the problem. It would fit nicely with the Supreme Court decision that money is free speech when given to a politician.
Remove all limits from what any voter can give to any politician in his home state who is running for state office. And the same for any person running for national office. Eliminate the ability of any business, union, PAC, etc. to give money to a politician. Then, (and this is the key) provide full disclosure on who gave what to whom. The internet is a great way to provide this information to all who care to look.