Chasing a competitive target of 173, India completed the task with five balls to spare to reach their second World T20 final. The reigning ODI world champion will lock horns with Sri Lanka in the title clash on Sunday.
Skipper Mahendra Singh Dhoni deliberately played a dot ball to ensure that the day's hero get a chance to score the winning stroke off Dale Steyn.
Kohli produced his best T20 international knock when it mattered the most, scoring his runs in just 44 balls and with the help of five fours and two sixes. It was a fantastic knock on a difficult track that was not conducive for stroke-making.
Suresh Raina's 21 off nine balls was equally important in the final context of the match as India reached the final for the first time since the inaugural edition in South Africa.
Needing 51 off the last five overs, Kohli upped the ante as he smacked Imran Tahir over deep mid-wicket for a huge six to complete his 50 off 35 balls. But Tahir got a break when Yuvraj Singh (18) didn't get the elevation and A B de Villiers took one of the best catches of the tourney, running from his long-on position.
New man Raina got into the act immediately as he pulled Wayne Parnell behind deep fine leg for a six to bring down the equation. An uppishly played shot through vacant third man and an inside edge meant that Parnell gave away 17 runs. The over proved to be the turning point as India got the equation down to 23 from three overs.
Indian started the chase with a flurry of boundaries, including three in JP Duminy's first over. Ajinkya Rahane's was a backfoot punch through the covers while Rohit Sharma got an edge through slips and banged the next past mid-off as 14 came off the opening over.
Albie Morkel got the new ball from the other end and Rohit's spanking square cut got him his third boundary. His fourth boundary came when he pulled Morkel over the mid-wicket fielder.
With 23 from two overs, India's chase was on the right track.
Dale Steyn was promptly brought in and the last ball of his opening over was slashed over point by Rohit for a six.
Not to be left behind, Rahane did the same with left-arm seamer Hendricks.
However, Rohit was gone when he offered a skier off Hendricks, as skipper Faf Du Plessis ran from his mid-off position to take well-judged catch. Rohit's 24 came off 13 balls with four boundaries and six.
The 50 came off five overs as Rahane moved towards the leg-side to lift Parnell over extra cover for a huge six. Parnell had his revenge when he bowled one just short of length and Rahane's short arm jab was taken by de Villiers,
running from mid-wicket boundary position. Rahane took 30 balls for his 32 that had two fours and a six.
Kohli played himself in and his first big shot was a six off Duminy. When Hendricks bowled a short one, Kohli pulled him behind square as the 100 came up in the 13th over. The script then pretty much unfolded on expected lines as India romped home comfortably.
Earlier, Du Plessis came back from his one-match suspension with an attractive half-century as South Africa posted a challenging total. Riding on Du Plessis' 58 off 41 balls and senior campaigner Jean-Paul Duminy's 40-ball 45, the Proteas scored their highest total against India in the tournament so far.
David Miller's 12-ball 23 helped to prop up the total. Barring Ravichandran Ashwin, who had brilliant figures of three for 22 from his four overs, other Indian bowlers had a disappointing day in office.
Amit Mishra gave his worst performance (0/36 in three overs) of the tournament, even as Dhoni was unable to complete the quota of his three specialist bowlers.
The most impressive part about South Africa's batting was that their batsmen did not try to fight the conditions. Du Plessis showed the virtue of spending some time before going on the ascendancy, while the seasoned Duminy also played an important hand in the team's total.
The Duminy-Du Plessis pair added 71 runs in 8.4 overs for the third wicket, laying the foundation for a fighting score.
Quinton de Kock (6) got a debatable caught behind decision off Bhuvneshwar Kumar's bowling. The left-handed opener flashed at a wide delivery from the seamer but it deviated taking an under-edge that was caught by Dhoni.
Umpire Ian Gould gave the decision after some contemplation but the batsman looked unhappy.
Hashim Amla (22) continued with his fine batting and drove Mohit Sharma on the rise to get a streaky boundary. Du Plessis followed the suit charging out to the young seamer and hitting him over mid-wicket for a four.
However, Amla's free-hitting did not last long even though he got a couple of more boundaries in Bhuvneshwar's next over. Ashwin coming from round the wicket bamboozled Amla with a carom ball that spun like a classical leg-break. He played for the turn and saw the off-stump being pegged back.
Du Plessis took some time to settle down but then played some free-flowing strokes. He came down the track to hit Mishra over extra cover for a boundary. When Raina bowled a long-hop, he was pulled over extra-cover for another four.
The most breathtaking of Du Plessis' shots was a one-handed slog sweep off Raina that went over deep square leg for a six.
The 13th over of the innings turned out to be unlucky for Mishra as he was hit not just for 17 runs but three landmarks were also achieved -- Du Plessis scored his fifty, the 50-run stand came between the captain and Duminy, and the team reached the 100-run mark.
The 50-run partnership with Duminy came up when Du Plessis just waited for Mishra's loopy leg break to turn and scooped it over short third-man for a boundary.
Duminy's contribution was only 10 runs in the half-century stand. But he quickly changed the statistic as he sent a Mishra full-toss into the deep mid-wicket stand as the team's 100 came up in that very over.
It turned out to be Mishra's worst over in the tournament as Duminy swept him for another boundary. As the South African duo was threatening to go hell-for-leather, Dhoni had to bring back his best bowler Ashwin.
Dhoni's 'Man-Friday' got a lucky breakthrough but not before Du Plessis had hit him towards 'cow-corner'. The dismissal was a freak one as Ashwin bowled another wrong-un, but the length was a hittable one. Du Plessis tried a repeat his act but the ball hit his armpit and rolled onto the stumps. His 41-ball 58 had five fours and two sixes.
In his next over, Ashwin got the dangerous De Villiers caught at the deep fine leg boundary. Duminy, however, continued as he danced down the track to hit Ashwin over long-on for a six. Duminy's innings had a four and three sixes.