如何在SQL中将哈希HEX值转换为对应C#的Base64格式?
解决方案:SQL中将HEX哈希字符串转换为Base64格式
要实现和C# Convert.ToBase64String(hash)完全一致的Base64转换结果,你需要分两步操作:先将HEX字符串转回二进制数据,再将二进制数据转换为Base64格式。
完整SQL示例
declare @Pass as varchar(max) = 'abc' declare @HexPass as varchar(max) = convert(varchar(max), hashbytes('SHA2_512', @Pass), 2) -- 第一步:将HEX字符串转为二进制数据 declare @BinaryHash varbinary(max) = CONVERT(varbinary(max), @HexPass, 2) -- 第二步:将二进制数据转为Base64字符串 declare @Base64Pass varchar(max) = CAST('' AS xml).value('xs:base64Binary(sql:variable("@BinaryHash"))', 'varchar(max)') -- 输出对比结果 select @Pass as PlainText, @HexPass as HexHash, @Base64Pass as Base64Hash
关键步骤说明
HEX转二进制
使用CONVERT(varbinary(max), @HexPass, 2),其中style=2表示输入的HEX字符串不带0x前缀,和你生成@HexPass时的参数保持一致(你用convert(varchar(max), hashbytes(...), 2)生成不带前缀的HEX)。二进制转Base64
借助SQL Server对XML类型的支持,通过CAST('' AS xml).value(...)方法,将二进制数据转换为xs:base64Binary类型,再提取为字符串格式。这一步是实现Base64转换的核心。
结果验证
运行上述SQL后,@Base64Pass的值会和你C#代码中的expectedResult完全一致:3a81oZNherrMQXNJriBBMRLm+k6JqX6iCp7u5ktV05ohkpkqJ0/BqDa6PCOj/uu9RU1EI2Q86A4qmslPpUyknw==
内容的提问来源于stack exchange,提问作者Konrad Viltersten
相关产品推荐
相关产品推荐

