0
私は文字列をBase64表現にエンコードし、SQL 2012のdbのVARCHAR(MAX)列に格納しました。なぜBASE64文字列がsql 2012でデコードされないのですか?
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#の側には、エンコードとデコードが、私はC#でSOTエンコードを行うと、SQLで解読しようとしているため正常に動作します。
SELECT
の文からxs:base64Binary
機能が欠落しています(strData))); '何かに? UTF8はエンコーダとしてASCIIよりも賢明かもしれません。 –いいえ、うまくいきますが、問題はSQL側でエンコードされた値をデコードしないためです – Covert
UTF8.GetBytes/Stringを使用するように変更してください。すべての段階でサンプルの入出力を共有できます。 –