Pace bowler Kagiso Rabada led the hosts’ charge taking five wickets for just 30 runs to bowl Bangladesh out for 172 runs in the second innings.
The visitors’ second innings effort was slightly better than their first of 147 runs in reply to South Africa’s mammoth first innings total of 573 runs.
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, who had match figures of 10 for 63, became the 16th South African to take 100 Test wickets. 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.
Bangladesh resumed their second innings on seven for no wicket. Rabada and Duanne Olivier rattled the Bangladesh batsmen with short-pitched deliveries.
Rabada picked up two quick wickets before before Imrul Kayes, Mushfiqur Rahim and Mahmudullah tried to steady the innings. However, following their dismissal, the remaining batsmen didn’t offer much resistance as the last six wickets well for 80 runs.
Medium pace bowler Andile Phehlukwayo took three wickets while Olivier and Wayne Parnell claimed a wicket each.
Rabada won the man of the match award while Dean Elgar was declared the man of the series.