2

SqlServer 2008 R2 データベースのデータを暗号化/復号化するために、encryptbypassphrase/decyptbypassphrase を使用しています。

正常に動作していますが、decryptbypassphrase が「\0」などの「ノイズ」をデータに追加しています。私はそれを正規表現で管理しました。

しかし、今ではさらに悪い状況になり、関数は ": Oui" ではなく "ýÿ:ýÿ ýÿOýÿuýÿiýÿ" を返しています (文字列から ýÿ を削除する必要があります...)

を使用しCONTEXT_INFOてパスフレーズを保存し、クエリで取得しています。ストアド プロシージャ:

DECLARE @PassPhrase VARCHAR(128)
EXEC [dbo].[sp_GetContextInfo]
@ContextInfo = @PassPhrase out
-- 
SELECT
ap.ActionPlanStatusId,
CONVERT(VARCHAR(MAX),DECRYPTBYPASSPHRASE(@PassPhrase,ap.Cost)) AS Cost,
CONVERT(VARCHAR(MAX),DECRYPTBYPASSPHRASE(@PassPhrase,ap.[Description])) AS [Description],
CONVERT(VARCHAR(MAX),DECRYPTBYPASSPHRASE(@PassPhrase, ap.Follow)) AS Follow,
ap.Id,
ap.ModifiedBy,
ap.ModifiedOn,
ap.RiskSheetId,
ap.TreatmentId
FROM dbo.ActionPlan ap
WHERE ap.Id = @ActionPlanId

コードは次のとおりです (単純な DataReader を使用しています)。

var actionPlan = new Core.ActionPlan
{
Id = Convert.ToInt32(reader["Id"]),
ActionPlanStatusId = Convert.ToInt32(reader["ActionPlanStatusId"]),
Cost = reader["Cost"] as string,
Description = reader["Description"] as string,
Follow = reader["Follow"] as string,
RiskSheetId = Convert.ToInt32(reader["RiskSheetId"]),
TreatmentId = Convert.ToInt32(reader["TreatmentId"]),
ModifiedOn = Convert.ToDateTime(reader["ModifiedOn"])
};

ありがとう

4

2 に答える 2

0

CONTEXT_INFO可能性のある原因です。データの右側にゼロを静かに埋め込むため、読み返すと、データは最初に保存するつもりだったものとは異なります。

例えば:

SET CONTEXT_INFO 0x12;
PRINT CONTEXT_INFO();

版画:

0x1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

問題は、 で同じ結果が得られることですSET CONTEXT_INFO 0x1200。最後のゼロはパディングと区別がつかなくなります!

私が見ることができるこのあいまいさを解決する唯一の方法は、データの実際の長さを の最初のバイトにエンコードし、SET CONTEXT_INFOそれに応じて の結果をアンパックすることですCONTEXT_INFO()

于 2014-10-29T23:01:11.687 に答える
0

はい、両方にvarcharを使用しています(最初にnvarcharを試しましたが、復号化されたテキストは㈱㐳㘵㠷のように「奇妙」でした)。

これらの日本語の文字は実際のテキストだと思いますので、NVARCHAR の修正に戻ることをお勧めします。C# の string データ型は Sql NVARCHAR データ型にマップされます。

于 2013-06-12T20:12:06.317 に答える