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 another poor performance by Bangladesh on a pitch which had bounce but was not especially bowler-friendly.
Also Read
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 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.
Disclaimer: No Business Standard Journalist was involved in creation of this content