背景:システム A からプロファイル データを読み込み、システム B に対応するプロファイルとメンバーシップ ユーザーを作成する SSIS パッケージがあります。システム B は、SSIS パッケージによって生成されたパスワードを解読できる必要があるカスタム ASP.NET メンバーシップ プロバイダーを使用します。SSIS パッケージで使用されるソルト生成と暗号化のための CLR ストアド プロシージャを作成しました。
問題:暗号化されたパスワードを ASP.NET メンバーシップ プロバイダーで解読できるようにするには、CLR ストアド プロシージャで使用される MachineKey を設定する必要があります。これを行う方法、または可能かどうかさえわかりません。
Reflector を使用して、必要な暗号化コードを System.Membership dll から取り出しました。少しリファクタリングすると、次のようになります。
private static byte[] PerformEncryption(byte[] input, bool encryptFlag)
{
if (input == null)
return null;
byte[] inputBuf = input;
byte[] outputBuf;
try
{
using (MemoryStream targetStream = new MemoryStream())
using (SymmetricAlgorithm algo = SymmetricAlgorithm.Create())
using (ICryptoTransform cryptoTransform = CreateCryptoTransform(algo, encryptFlag))
using (CryptoStream cryptoStream = new CryptoStream(targetStream, cryptoTransform, CryptoStreamMode.Write))
{
int start = 0;
int length = input.Length;
// Write the input buffer to the cryptoStream passing the byte stream through the cryptoTransform
cryptoStream.Write(inputBuf, start, length);
cryptoStream.FlushFinalBlock();
outputBuf = targetStream.ToArray();
}
}
catch (Exception ex)
{
throw new InvalidOperationException("Unable to " + (encryptFlag ? "en" : "de") + "crypt data. See inner exception for more detail.", ex);
}
return outputBuf;
}
問題はSymmetricAlgorithm.Create()
、MachineKey で定義された初期ベクトルを使用してデフォルトの対称アルゴリズムを作成することです。
どんな助けでも大歓迎です。また、より簡単な別のアプローチがあれば教えてください。
ありがとう。