Bangladesh, who were forced to follow-on 492 runs behind after being shot out for 118 in their first innings, were dismissed for 253 in their second knock just before stumps on the third day.
Rahul Dravid's men won the series 1-0 following a draw in the rain-hit first Test in Chittagong, and provided a birthday gift for interim coach Ravi Shastri, who turned 45 on Sunday.
Bangladesh's outgoing coach Dav Whatmore was not so lucky, ending his four-year tenure with them with the team's 40th defeat in 46 Test matches so far. Bangladesh have won just one Test while five were drawn.
Zaheer, who claimed 5-34 in the first innings, rattled Bangladesh with the first two wickets on either side of the lunch break at the Sher-e-Bangla National Stadium.
The hosts were reduced to 10-3 soon after lunch before 22-year-old Mohammad Ashraful boosted the total with a breathtaking counter-attack that fetched him 67 off 41 balls.
Ashraful raced to 50 off just 26 deliveries, narrowly missing South African Jacques Kallis' world record of the fastest half-century in Test cricket in 24 balls against Zimbabwe in 2004.
Ashraful smashed 12 boundaries and two sixes with a flurry of drives, pulls and lofted shots that drew wild cheers from some 10,000 home fans who braved the hot and humid weather.
Bangladesh slipped to 154-7 before tailender Mashrafe Mortaza delayed the end with a stroke-filled 70 off 68 balls that contained eight fours and three sixes.
Rajin Saleh (42) was the only other home batsman to offer resistence against the Indian spinners, for whom Romesh Powar picked up 3-33 and Anil Kumble and Sachin Tendulkar took two wickets each.
Zaheer, who had taken three wickets the previous evening after India rattled up 610-3 declared, struck with the day's second delivery when Bangladesh started at 58-5.
Zaheer trapped Saqibul Hasan leg-before before the left-hander could add to his overnight score of 30.
Debutant seamer Ishant Sharma picked up his first Test wicket as Mortaza slashed a short ball into Kumble's safe hands at gully to reduce Bangladesh to 93-8.
Zaheer completed his fourth five-wicket haul when he bowled Mohammad Rafique, before Kumble terminated the innings by making Mashud (25) edge a catch to wicket-keeper Mahendra Dhoni.
When Bangladesh began their second innings just before lunch, Zaheer dismissed opener Javed Omar for a first-ball duck for the second time in the match.
Omar, who was held in the slips in the first innings, was unlucky to be given out caught by the wicket-keeper down the leg side as television replays showed the bat did not deflect the ball.
The first Test in Chittagong was drawn after rain washed out 15 of the scheduled 30 hours of play.
India also won the preceding one-day series 2-0 to make amends for their shock World Cup defeat at Bangladesh's hands.