Hudson (6-6) set down 20 straight batters after J.P Arencibia's second-inning single. He ended up allowing two hits and one walk while striking out eight.
The right-hander threw only 96 pitches, 63 of them for strikes, before yielding to closer Craig Kimbrel after allowing a single and a walk to lead off the ninth.
Kimbrel followed with three straight strikeouts to rack up his 20th save as Atlanta took the first a three-game interleague series with Toronto.
Hudson broke a scoreless tie in the seventh inning by blasting a pitch from Ricky Romero (6-7) into the left field stands, scoring Diory Hernandez in front of him.
Romero surrendered just the two runs on six hits in a seven-inning start for the Blue Jays.