Chahal finished with 5-22 in 8.2 overs, ripping through the middle-order as India won the toss and skittled their hosts for 118, South Africa's lowest total in home ODI matches.
India then knocked off the victory target in 20 overs to humiliate their hosts.
After victory in the opening match of the six-game series in Durban, India always looked in control of the chase as opener Shikhar Dhawan (51 not out from 56 balls) and captain Virat Kohli (46 not out from 50 balls) made light work of the home attack.
The third match in the series will be played in Cape Town on Wednesday.