Zlatan Ibrahimovic tapped in after two minutes, making the Venetians the 80th team the Swede has scored against in Europe’s top five leagues, a record only Cristiano Ronaldo has matched since 2000.
Hernandez blasted home early in the second half, before Venezia defender Michael Svoboda was sent off for blocking a goal-bound shot with his arm, giving Milan's stand-in captain the chance to dispatch the resulting penalty.
Milan, who have not won the Serie A title since 2010-11, provisionally moved into first place on 48 points, two ahead of Inter Milan.
However, the reigning champions have two games in hand, including a clash with Lazio later on Sunday.
“This must be the year we prove ourselves. We need to show that we are competitive again," Milan coach Stefano Pioli told Sky Italia.
“We will see if we can make the final step up, to be winners. This was not an easy game. We did well to make it look simple. It was a team victory.”
Venezia’s winless run in the league now stands at seven games, and they sit in 16th place on 17 points, four clear of the relegation zone.
Pioli, marking his 400th game as a Serie A coach, had an 11-man absentee list to contend with due to injuries and players on Africa Cup of Nations duty.
But his side immediately took control when Rafael Leao picked out Ibrahimovic for the simplest of finishes.
The lively Portuguese winger bagged his second assist three minutes after the break by sending a pass down the left wing for Hernandez to chase and power home from a tight angle.
Any chance of a Venezia fightback crumbled before the hour mark, when Hernandez’s close-range effort struck Svoboda’s arm.
The Austrian was given a red card, and Hernandez calmly struck the resulting penalty into the top corner.