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

时间:2017-03-15 11:33:15

标签: c# sql-server tsql base64

我已将我的字符串编码为Base64表示并将其存储在sql 2012的db中的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中执行。

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#端适用于ENCODING和DECODING但我正在尝试做的是在c#中编码并在sql中解码。

1 个答案:

答案 0 :(得分:1)

您错过了xs:base64Binary声明

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

返回

jxaedshasb2nzudkbuidjr35|15.00