Opener Marvan Atapattu scored his seventh one-day century as Sri Lanka kept their hopes alive in this five-match series with a seven-wicket victory against South Africa at Benoni on Sunday.
Chasing the 253 for seven scored by South Africa earlier in the day, Sri Lanka's batsmen finally hit form, eventually coasting past the target with 8.2 overs to spare.
Atapattu, the vice-captain, finished the game with a straight driven six having scored a brilliant 123 from just 121 balls including 15 fours and one six.
He added 140 runs with De Silva, who also threw off the shackles off poor form with an industrious 71 from 77 balls with 10 boundaries.
After humiliating defeats at Wanderers and Centurion, where they were bowled out for 128 and 140, the visitors still trail 2-1, needing to win the last two games to take the series.
Crucially, unlike those two games, the tourists survived the initial new ball burst from Shaun Pollock and Makhaya Ntini without substantial damage, losing just two wickets: Sanath Jayasuriya (22) brilliantly caught in the gully by the irrepressible Jonty Rhodes and Kumar Sangakkara (10) caught at slip.
Atapattu and De Silva then consolidated on a good batting pitch offering South Africa's fast bowlers no lateral movement whatsoever once the ball had lost its initial hardness.
De Silva looked rusty at the start and Atapattu was cautious, but once established the pair rattled along at nearly a run a ball.
When De Silva was eventually clean bowled trying to pull a good length delivery from Pollock, Sri Lanka were home and dry needing just 41 runs with 13.1 overs remaining.
Earlier, Sri Lankan captain Sanath Jayasuriya won his first toss of the series, raising eyebrows as he bravely elected to bowl first on a flat looking pitch. But the gamble was justified as Sri Lanka's bowlers wobbled the new ball and took early wickets.
Chaminda Vaas, playing in his 200th ODI, struck first, winning a diabolical lbw decision from umpire Russell Tiffen against Herschelle Gibbs (0).
Medium pacer Chamila Gamage, playing his first game of the series after a knee injury to Pulasthi Gunaratne, then knocked back Boeta Dippenaar's (5) off-stump.
Vaas cleaned bowled inform opener Graeme Smith (16) with a delivery that cut back through the left-hander's bat and pad.
Next over, Gamage produced a perfect leg-cutter to have Jonty Rhodes (0) caught at the wicket to leave South Africa tottering on 35 for four.
But Sri Lanka were unable to press home their advantage as Kallis, who exudes aura of invincibility whenever he walks to the crease these days, fought back with a burst of rollicking cover drives.
Kallis added 36 with Mark Boucher (14) before the wicket-keeper batsman dragged a short delivery onto his stumps and then 81 from 103 balls with Pollock, who scored 39 from 48 deliveries, hitting four boundaries.
Sri Lanka paid the penalty for bowling too short after their early success as Kallis and Pollock wrestled away the initiative from the visitors after a period of consolidation.
When Pollock dragged a short delivery from Jayasuriya straight into the hands of short cover, Lance Klusener helped maintain the momentum, adding a further 57 off 81 balls with Kallis.
Kallis missed out on ninth one-day century when Jayawardene held on to a stinging catch at mid-off but that only set the stage for Klusener to state his credentials for a place in the World Cup.
Dropped for the first two games, Klusener had endured a lean spell with the bat and was under severe pressure for his place. But the left-hander seized his opportunity with an unbeaten 60 from 57 balls, hitting seven fours and a six, his first fifty in 11 matches.
Vaas was the pick of the Sri Lankan bowlers, finishing with two for 39 from 10 overs, but Jayasuriya was also economical, conceding just 37 runs in 10 overs, the first time he has completed his full quota since dislocating his shoulder during the Morocco Cup in August.