The hosts resumed their second innings on 213-4 and added 25 before wickets tumbled and they were dismissed for 274, with Josh Hazlewood taking 6-67.
Australia needed 188 to win and, after a promising start, were slowed down by losing regular wickets, including captain Steve Smith for 28.
Their last six wickets went for 11 runs as Ravichandran Ashwin took 6-41.
India pace bowler Umesh Yadav also played a key part as he took the wickets of Smith and Shaun Marsh in the second innings.
Marsh was given out leg before wicket but the decision would have been overturned had he chosen to review.
"It was a great Test match, it certainly ebbed and flowed throughout," said Smith. "The partnership between Cheteshwar Pujara and Ajinkya Rahane really hurt us.
"This afternoon did not go to plan. We weren't up to it but I'm proud how the boys played."
India conceded a first innings deficit of 87 after they were skittled out for 189 before Australia made 276.
Pujara and Rahane put on 118 for the fifth wicket in their side's second innings and it proved crucial as they helped India to 274 and a match-winning lead.
"After losing the first Test how we did, we wanted to bounce back hard," said India captain Virat Kohli.
"We knew if we got more a lead of than 150 it would be difficult."
The third Test of the four-match series will start on Thursday, 16 March in Ranchi.
India bowled Australia out for 112 in Bengaluru to win a dramatic second Test by 75 runs and level the series at 1-1.