为什么 BASE64 字符串在 sql 2012 中没有被解码?

Why BASE64 string is not getting decoded in sql 2012?

我已将我的字符串编码为 Base64 表示并将其存储在 sql 2012 数据库的 VARCHAR(MAX) 列中。

现在我正在尝试使用这个解码值:

Declare @FMoney varchar(max)

Set @FMoney= (Select FinancialMoney from  AppliedWorks aw
where AppliedWorkID= 20082)

SELECT CAST( CAST( @FMoney as XML ).value('.','varbinary(max)') AS varchar(max) )

但它并没有给我原始值,而是给出了一个很长的另一个base64字符串。

注意:存储在 db 中的值是通过 C#.net 编码并发送到 db (anhhZWRzaGFzYjJuenVka2J1aWRqcjM1fDE1LjAw) 但解码应该在 sql.[=14 中执行=]

C#编码代码:

public static String Encrypt(string strData)
    {
        if (strData != "")
        {
            strData = string.Format("{0}|{1}", HttpContext.Current.Session.SessionID, strData);
            SHA1Managed shaM = new SHA1Managed();
            Convert.ToBase64String(shaM.ComputeHash(Encoding.ASCII.GetBytes(strData)));
            Byte[] encByteData;
            encByteData = ASCIIEncoding.ASCII.GetBytes(strData);
            String encStrData = Convert.ToBase64String(encByteData);
            return encStrData;
        }
        else
        {
            return "";
        }

    }

更新:我也添加了c#.net的解码程序。

 public static String Decrypt(string strData)
    {
        if (string.IsNullOrEmpty(strData) == false)
        {
            Byte[] decByteData;
            decByteData = Convert.FromBase64String(strData);
            String decStrData = ASCIIEncoding.ASCII.GetString(decByteData);

            String[] SplitValue = decStrData.Split('|');

            String ReturnValue = SplitValue[1];
            return ReturnValue;
        }
        else
        {
            return "";
        }

    }

C# 端在编码和解码方面工作正常,但我正在尝试做的是在 C# 中编码并在 sql 中解码。

您缺少 SELECT 语句中的 xs:base64Binary 函数

SELECT CAST( CAST( @FMoney as XML ).value('xs:base64Binary(.)','varbinary(max)') AS varchar(max) )

returns

jxaedshasb2nzudkbuidjr35|15.00