Dilshan scored 116 from 127 balls in Sri Lanka's 252-4 as the visitors levelled the series at 1-1 after New Zealand won the first game at Hagley Oval in Christchurch on Sunday.
Sri Lanka captain Angelo Mathews was 39 not out with Lahiru Thirimanne on two as the visitors chased down New Zealand's 248 all out in 47.4 overs.
Dilshan was the key for the visitors, combining with fellow opener Dimuth Karunaratne (21) in a 64-run opening stand before he scored 52 runs with Kumar Sangakkara (38) and 47 with Mahela Jayawardene (27) and 74 runs with Mathews that kept the scoreboard ticking over at almost a run a ball.
The right hander brought up his century with a wonderful cover drive for his 13th boundary and let out an almighty bellow and then set about finishing the game in a hurry, belting Adam Milne for three boundaries in the 45th over.
He was dismissed in the next over when pace bowler Matt Henry, who is not in the World Cup squad, had him caught by wicketkeeper Luke Ronchi from a short ball. Henry finished with 2-34 from 9.4 overs.
New Zealand captain Brendon McCullum had earlier blasted 12 boundaries and five sixes to score 117, his fifth one-day international century for his side, the only other bright spot in a otherwise poor performance from the hosts.
There were four run outs on Thursday and McCullum and Ross Taylor also narrowly avoided being dismissed in similar fashion.
Opener Martin Guptill is also still out of form, while the free-flowing Taylor scratched together 34 runs from 69 balls, though he was not the only specialist batsmen to struggle against Sri Lanka's slow bowlers.
The third match is at Eden Park in Auckland on Saturday.