New Zealand batted for two overs and went to lunch on the third day at one run without loss.
De Silva walked in to bat when Sri Lanka was 93 for four and saw quick wickets fall at the other end pushing Sri Lanka to 131 for six. He survived at nine when fast bowler Trent Boult dropped an easy high catch off his own bowling; but he made good his luck and held the Sri Lanka innings together facing 148 deliveries hitting 16 boundaries and a six.
He shared 41 runs with No. 8 batsman Dilruwan Perera (13) and 43 runs with Suranga Lakmal (10) at No.9.
Sri Lanka captain Dimuth Karunaratne made 65 while opening the batting.
Sri Lanka resumed day three at 144 for six and left-arm spinner Ajaz Patel trapped Perera lbw for New Zealand's first breakthrough for the day.
Fast bowler Tim Southee continued his good run from the second day, taking two more wickets to finish with four for 63. Boult had three for 75.
Sri Lanka won the first test by six wickets in Galle and looks to sweep the two-test series.