Chasing a tricky target of 231, Sri Lanka were eight for two in their second innings at the break with Mohammad Shami and Bhuvneshwar Kumar removing openers Sadeera Samarawickrama and Dimuth Karunaratne.
Kohli declared India's second innings at 352 for eight after reaching his 18th Test hundred and 50th in international cricket.
Resuming the day at 171/1, India lost their first wicket with addition of 21 runs as Lokesh Rahul (79) once again failed to convert his fifty. Wickets kept falling thereafter with Suranga Lakmal (3/93) and Dasun Shanaka (3/76) returning with three wickets each.
Kohli, whose previous best at Eden Gardens was 45, also survived an LBW dismissal on 72 off Lakmal.
After being circumspect against Lakmal, the Indian skipper slowly got into his groove and hammered him for a six with an inside-out shot to get into the 90s.
Looking unperturbed, Kohli once again took on the Lankan pace spearhead with a horizontal six over cover to get to his hundred in style.
Disclaimer: No Business Standard Journalist was involved in creation of this content