Set a modest 205 for victory, New Zealand cruised to their target with 33 balls to spare on the back of Guptill’s 103 not out as they finished on 207 for two.
The victory levels the three match series at 1-1, with the deciding match to be played in Durban on Wednesday.
After winning the toss and electing to bat, South Africa never got momentum in their innings and were bowled out in the final over for 204, not helped by losing their last three wickets to run outs.
New Zealand bowled with accuracy on a slow wicket as the Proteas batsmen reached the boundary rope on just 15 occasions.
Only middle-order batsman Farhaan Behardien found any sort of fluency as he accumulated a neat 70 from 87 balls to give the home side some sort of target to defend.
Rilee Rossouw (39) and AB de Villiers (31) both got starts in the top-order, but could not kick-on.
The innings ended in farce when Aaron Phangiso, Dale Steyn and Imran Tahir were all run out, with Vernon Philander (30 not out) the common denominator at the other end.
Credit must go to the way the New Zealand bowlers stifled the run rate though, with seamer Doug Bracewell the pick as he recorded figures of three for 31 in his 10 overs.
The tourists never looked troubled in their reply as a 126 run opening stand between Guptill and Tom Latham (64) laid the platform for the emphatic win.
Guptill’s ninth ODI century took 134 balls and while it lacked the brutality of some of his other international hundreds, was skilful batting on a pitch most other batsmen found difficult.
Debutant George Worker finished on 20 not out as he put on 67 with Guptill for the third wicket.
(Reporting by Nick Said, editing by Mitch Phillips)