Chasing a target of 187 runs, set by India, South Africa fell 14 runs short and lost the match in the Group C match of the World Twenty20 at the Beausejor Cricket Stadium in Gros Islet, St Lucia on Sunday.
Raina's score is just the third century made in a Twenty20 international and included nine fours and five sixes as he peppered the ball around the field showing superb timing and placement.
The 23-year-old enjoyed a big slice of luck in the fifth over though when he was caught off a no-ball from Albie Morkel.
Yuvraj Singh's 37 contributed to a key 88-run partnership with Raina who brought up his ton with a massive six over midwicket in the final over before he was caught off the next ball from Morkel.
Earlier South Africa captain Graeme Smith won the toss and elected to field.
India made two changes from the side that beat Afghanistan by seven wickets here on Saturday.
Opening batsman Gautam Gambhir was ruled out with stomach illness and his place was taken by Dinesh Karthik.
And, in a tactical switch, leg-spinner Piyush Chawla replaced fast bowler Zaheer Khan.
This was South Africa's first match of the tournament and the Proteas opted to use the big-hitting Loots Bosman as captain Graeme Smith's partner at the top of the order.
India: Dinesh Karthik, Murali Vijay, Suresh Raina, Yuvraj Singh, Mahendra Singh Dhoni (capt/wkt), Yusuf Pathan, Ravindra Jadeja, Harbhajan Singh, Praveen Kumar, Piyush Chawla, Ashish Nehra
South Africa: Graeme Smith, Loots Bosman, Jacques Kallis, AB de Villiers, JP Duminy, Mark Boucher (wkt), Albie Morkel, Roelof van der Merwe, Morne Morkel, Rory Kleinveldt, Dale Steyn
Umpires: Aleem Dar (PAK) and Simon Taufel (AUS)
TV umpire: Rod Tucker (AUS)
Match referee: Ranjan Madugalle