The second Test between South Africa and New Zealand is at risk of not reaching a fourth day as the Proteas destroyed the Black Caps' top order in the evening session on day two in Port Elizabeth.

Dale Steyn, Rory Kleinveldt and Robin Peterson took two wickets each to reduced the hapless visitors to 47 for six at stumps, still 478 runs behind the Proteas' 525 for eight declared, which they posted shortly after tea.

Faf du Plessis and Dean Elgar were the stars with the bat for the home side, both recording centuries on the day. Du Plessis added a second ton to his records in just his fourth Test, while Elgar made a maiden ton, unbeaten on 103, in his third Test.

The Kiwis lost their first wicket with just two runs on the board and it soon looked like the 45 all out from Cape Town could be on the cards, as the Proteas bowlers ripped through the line up. It was fast, aggressive bowling from the attack, before spinner Peterson struck with two wickets in two balls.

The hosts started the day on 325 for four, and lost only Hashim Amla's wicket in the morning. The prolific batsman started on 106 but could only add four more runs to his score before edging Trent Boult down the leg side.

Du Plessis, who had been struck in the groin earlier in the day and needed a bit of recovery time, was in no rush to reach his second Test century, and languished in the 90s for nearly an hour, and saw out the final over before lunch as a maiden.

The Proteas sat on 390 for five at the first break, with Du Plessis adding 30 runs to his overnight score of 69, while Elgar had made 31 and looked solid in the wake of Amla's departure.

Du Plessis reached his second Test ton soon after the interval though, hitting a massive six to bring up the three figures. He and Elgar then pushed on and the latter made his first half century for the Proteas.

Faf managed to reach 137 before departing, handing Colin Munro his first Test wicket as he caught a leading edge into the air, safely caught by Brendon McCullum. Peterson then came in but didn't last long, falling for eight to Munro, just before tea.

Elgar was on 91 off 157 balls after the afternoon session, while fast bowler Steyn was on four as they waited to see when the declaration would arrive. Graeme Smith was merciful though and allowed Elgar to get his ton, striking a boundary and immediately leaving the field.

Martin Guptill was the first to depart, after surviving an inexplicable dropped catch by Jacques Kallis. It did not prove costly though, as Steyn induced the outside edge and Alviro Petersen held on at third slip.

Kane Williamson lasted only five balls before doing nearly the same thing as Guptill, edging Steyn, but this time it was Smith who held onto the catch at first slip.

Kleinveldt, in the side in place of the injured Vernon Philander, then struck too, and was bowling with huge aggression. Dean Brownlie was first to fall, edging behind for AB de Villiers to catch, before Daniel Flynn was trapped LBW for a duck. He chanced his arm with a review, but it was in vain.

Spinner Peterson was then introduced and he struck with his second and third deliveries. Opener McCullum, who had resisted for 91 minutes and made 13 runs, edged the spinner to Kallis and was horrified by his poor slog sweep attempt.

The next ball saw Munro, in his first ever Test innings, pop the ball to Elgar at short square leg, leaving the visitors deep in the more on 39 for six.