South Africa were dismissed for 512 in reply to New Zealand's first innings of 593 for eight declared.
South Africa take a 1-0 lead into the last Test, which starts in Johannesburg on Friday.
Prince's undefeated 108 was the highlight of the fifth day. The left-hander reached his century in the ninth over before lunch with a straight drive for four off the bowling of James Franklin.
The home side had resumed on 427 for five, and Prince and Mark Boucher [ Images ] took their partnership to 74 before they were separated in the fourth over.
Boucher (33) attempted to pull a delivery from Franklin and top-edged a catch to Stephen Fleming [ Images ] at first slip.
Franklin trapped Nicky Boje next ball but Andre Nel [ Images ] defended successfully to prevent the hat-trick.
The left-arm pace bowler eventually got Nel leg before for 12.
Makhaya Ntini [ Images ] offered Vettori a difficult return catch with the first ball he faced but the bowler dropped it.
South Africa were dismissed two overs after lunch when Ntini was run out for 11 by Nathan Astle after he attempted to take an ill-judged single off Vettori's bowling.
Franklin took three wickets for 95 runs.
New Zealand opener Peter Fulton [ Images ] survived on four when Steyn dropped him after he top-edged a pull off fast bowler Ntini to deep square leg.
Steyn made amends by finding the edge of Michael Papps's bat and having him caught by Prince at fifth slip for 20.