You must not use CAST(... AS NVARCHAR(32)), that would remove the 2 last characters
-- with SqlServer 2005
DECLARE @md5 VARCHAR(32)
DECLARE @string varchar(10)
SET @string = 'Davolio'
SELECT
HashBytes('MD5',@string ),
master.dbo.fn_varbintohexstr(HashBytes('MD5',@string )),
SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5',@string )),3,32 ),
SUBSTRING(CAST(master.dbo.fn_varbintohexstr(HashBytes('MD5',@string )) AS NVARCHAR(32)),3,32 )