在 SQL Server 中验证 BASE64 字符串

问题描述 投票:0回答:2

我想验证存储过程中存储在变量中的字符串是否是有效的 BASE64 字符串。

例如:

declare @source varbinary(max), @encoded varchar(max), @decoded varbinary(max)
set @source = convert(varbinary(max), 'Hello Base64')
set @encoded = cast('' as xml).value('xs:base64Binary(sql:variable(''@source''))', 'varchar(max)')

现在我想验证@encoded是否具有有效的BASE64字符串。

任何答案将不胜感激。

谢谢

sql-server sql-server-2008-r2 sql-server-2012
2个回答
0
投票

这样的东西应该有效:

declare @b64 varchar(max) = 'SGVsbG8gQmFzZTY0'

select UTF8Encoding
    ,case when UTF8Encoding is null then 0 else 1 end as Valid  from (
select CAST(CAST(N'' as xml).value('xs:base64Binary(sql:variable("@b64"))', 'VARBINARY(MAX)') as varchar(MAX)) UTF8Encoding
) a

0
投票

Base64 字符串的长度必须能被 4 整除(因此尾随“=”字符),因此如果您需要验证预期的 BASE64 字符串,那么您可以使用它。这可以在 UDF 中捕获,该 UDF 添加所需的尾随“=”字符,然后返回解码后的字符串:

create or alter function [dbo].[BASE64_DECODE] (
 @BinaryString varchar(max)
)
returns varchar(max)
as 
begin
 set @BinaryString = @BinaryString + case len(@BinaryString) % 4 when 1 then '===' when 2 then '==' when 3 then '=' else '' end
 return CONVERT(VARCHAR(MAX), CAST('' AS XML).value('xs:base64Binary(sql:variable("@BinaryString"))', 'VARBINARY(MAX)'));
end
go
© www.soinside.com 2019 - 2024. All rights reserved.