It was the biggest win in South Africa's Test history, surpassing the innings and 229 run victory over Sri Lanka in Cape Town in 2000/01.
Rabada took five for 30 as Bangladesh were bowled out for 172, a slight improvement on their first innings of 147 in reply to South Africa's 573 for four declared.
Rabada, 22, who had match figures of 10 for 63, became the youngest of 16 South Africans to take 100 Test wickets. He was playing in his 22nd Test. Only Vernon Philander (19) and Dale Steyn (20) of his compatriots have achieved the feat in fewer matches.
It was Rabada's third 10-wicket haul in Tests. He took his tally of Test wickets in 2017 to 54, the most by any bowler this year.
It was another poor performance by Bangladesh on a pitch which had bounce but was not especially bowler-friendly.
A small group of Bangladesh supporters cheered during a bright fifth wicket stand of 43 between Mahmudullah, who top-scored with 43, and Liton Das, who made 18. But their team gave them little else to applaud.
Rabada and Duanne Olivier were aggressive from the start of play, when Bangladesh resumed on seven for no wicket. They sent down numerous short-pitched deliveries and three batsmen were struck on their batting helmets, including captain Mushfiqur Rahim, who had lengthy treatment on the field after ducking into a bouncer from Olivier with his score on 11 soon after the mid-morning drinks break. He was hit on his helmet near the temple area.
Rahim was dazed and lay down next to the pitch while the Bangladesh team physiotherapist and South African team doctor attended to him. He carried on batting for another 50 minutes until he was leg before wicket to Wayne Parnell for 26 in the last over before lunch.
Rahim was stretchered off the field after being hit behind the left ear by a bouncer from New Zealand's Tim Southee in Wellington in January but was released from hospital the same day.
Mominul Haque was hit by a bouncer from Rabada two balls before hooking the same bowler to be caught at deep square leg for 11, while Mahmudullah was hit by Olivier before he had scored.
First Published: October 8, 2017, 6:15 PM IST