最善を尽くしても、Decrypt メソッドによってスローされる例外を修正することはできませんでした。データをバイトのバッファー配列に変換している行で、ArgumentNullException がスローされています。最初に追加しました:
if (String.IsNullOrEmpty(data))
{
throw new ArgumentNullException ("Null data");
}
パスワードについても同様に、同じコードを実行しました。次に、同じ例外が if ステートメントでポップアップした後、以下の try-catch ステートメントに変更しました。現在、例外は try-catch 行ではポップアップしませんが、代わりに Decrypt のバッファー変換行でポップアップします。try-catch でうまくいくと思っていたので、プログラムが何を望んでいるかはよくわかりませんが、私は C# にもかなり慣れていないので、明らかな何かが欠けている可能性があります。
public static string Encrypt (string data, string password)
{
if (String.IsNullOrEmpty(data as string))
{
throw new ArgumentException("Null data.");
}
if (String.IsNullOrEmpty(password as string))
{
throw new ArgumentException("Null password.");
}
using (SymmetricAlgorithm alg = GetAlgorithm(password))
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream (ms, alg.CreateEncryptor(), CryptoStreamMode.Write))
{
byte[] buffer = Encoding.UTF8.GetBytes(data);
cs.Write(buffer, 0, buffer.Length);
cs.FlushFinalBlock();
return Convert.ToBase64String(ms.ToArray());
}
}
public static string Decrypt (string data, string password)
{
try
{
String.IsNullOrEmpty(data);
}
catch
{
throw new ArgumentException("Null data.");
}
try
{
String.IsNullOrEmpty(password);
}
catch
{
throw new ArgumentException("Null password.");
}
using (SymmetricAlgorithm alg = GetAlgorithm(password))
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write))
{
byte[] buffer = Convert.FromBase64String(data);//This is where the exception occurs
cs.Write(buffer, 0, buffer.Length);
cs.FlushFinalBlock();
buffer = ms.ToArray();
return Convert.ToBase64String(buffer);
}
}