A lion-hearted effort from the bowlers Broad and Anderson undid the efforts of the rival spinners Peterson and Tahir.
England beat South Africa in low-scoring thriller
Defending a meagre 171-run total, England came up with a spirited bowling display to skittle out their opponents for 165 runs in 47.4 overs to snatch a spectacular win.
Stuart Broad (4-15) took the last two wickets and barring Hashim Amla (42), none of the South African batsmen could make an impact against the English bowlers who came up with a lion-hearted effort.
This was after South Africa's left-arm spinner Robin Peterson (3-22) had wrecked England top order, claiming two wickets in his first over, while his in-form spin colleague Imran Tahir (4-38) scythed through the lower order to send England packing for 171 in 45.4 overs.
"We didn't think 170 was as competitive as it should be but it's proved to be just that so we're delighted," said England spinner Graeme Swann.
"We knew there was a lot in the pitch for us. We knew it would turn, we knew it would keep low for the seamers and we knew how difficult it was to score from when we batted, especially at the end.
"As it turned out, their innings mirrored ours. We knew that pressure would build on the later batsmen and it was very hard to score runs at the end.
"It just goes to show that if you believe you can win any game... as we proved today."
South African batting line-up, which shone in victories against West Indies and the Netherlands, showed similar vulnerability to slump to 127 for seven from a relatively comfortable 82 for two.
With South Africa losing five quick wickets, a fresh life was injected in an otherwise dull match.
Things further spiced up when Faf du Plessis (17) ran himself out and Michael Yardy removed Peterson to pave the way for eventually a memorable victory, made possible by Broad's late double strikes.
In the morning, England captain Andrew Strauss won the toss and decided to bat first but a nightmare unfolded before his eyes at the M A Chidambaram Stadium.
His South African counterpart Graeme Smith opened with Peterson, whose magical first four-over spell – three wickets for four runs from four overs – wrecked England's top order.
Peterson removed the scoreless Strauss with his third delivery and Kevin Pietersen with his sixth and was not done yet.
Having sent down a maiden over, he returned to catch Ian Bell off his own bowling to reduce England to 15-3 inside five overs.
The 99-run fourth wicket stand between Jonathan Trott (52) and Ravi Bopara (60) somewhat arrested the slide but England never got going and lost the last five wickets for just 23 runs.
But despite their batting limitations, the total was enough to hand them a second victory in the tournament.
England won the toss
A Strauss c De Villiers b Peterson 0
K Pietersen c Kallis b Peterson 2
J Trott c & b Tahir 52
I Bell c & b Peterson 5
R Bopara lbw Morkel 60
M Prior c Van Wyk b Morkel 10
M Yardy c Peterson b Tahir 3
T Bresnan lbw b Steyn 1
G Swann c Duminy b Tahir 16
S Broad lbw b Tahir 0
J Anderson not out 2
Extras: (1b, 7lb, 12w) 20
TOTAL: (all out, 45.4 overs) 171
Fall of wickets: 1-1, 2-3, 3-15, 4-114, 5-134, 6-148, 7-149, 8-161, 9-161, 10-171.
Bowling: Robin Peterson 8-2-22-3 (1w), Dale Steyn 9-0-37-1 (1w), Morne Morkel 7-0-16-2 (1w), Jacques Kallis 4-1-14-0 (1w), Imran Tahir 8.4-1-38 (1w), Faf du Plessis 5-0-16-0, JP Duminy 4-0-12-0 (1w).
H Amla b Broad 42
G Smith c Prior b Swann 22
J Kallis c Prior b Broad 15
AB de Villiers b Anderson 25
F du Plessis run out (Bell/Prior) 17
JP Duminy b Anderson 0
M van Wyk b Bresnan 13
R Peterson c Prior b Yardy 3
D Steyn lbw b Broad 20
M Morkel c Prior b Broad 1
Imran Tahir not out 1
Extras (lb2, w4) 6
Total (all out, 47.4 overs) 165
Fall of wickets: 1-63 (Smith), 2-75 (Amla), 3-82 (Kallis), 4-124 (De Villiers), 5-124 (Du Plessis), 6-124 (Duminy), 7-127 (Peterson), 8-160 (Van Wyk), 9-164 (Steyn), 10-165 (Morkel)
Bowling: Yardy 9-1-46-1; Anderson 6-0-16-2 (3w); Bresnan 8-1-27-1; Swann 10-2-29-1; Broad 6.4-0-15-4; Pietersen 8-0-30-0
Result: England won by six runs
Umpires: Simon Taufel, Australia, and Amiesh Saheba, India.
TV umpire: Asoka de Silva, Sri Lanka. Match referee: Jeff Crowe, New Zealand.