我的问题是我需要将数据加密从数据库升级到AES。
原始数据已加密TDES。
所以我所做的就是使用TDES解密,然后使用AES重新加密。
我的问题是,如果由于某种原因,sql连接死了,或者程序死了,或者其他什么......只会更新数据库的一部分。
我试过了:
try
{
plainPassword = DecryptTDES(Convert.ToString(reader[1]));
if (!string.IsNullOrEmpty(plainPassword))
{
// Reencrypt plainPassword into AES
}
}
catch (Exception ex)
{
throw ex;
}
DecryptTDES看起来像这样:
using (System.IO.MemoryStream DecryptedStream = new System.IO.MemoryStream())
{
using (System.Security.Cryptography.CryptoStream crStream = new System.Security.Cryptography.CryptoStream(DecryptedStream, cryptoTransform,
System.Security.Cryptography.CryptoStreamMode.Write))
{
try
{
crStream.Write(cypherTextBArray, 0, cypherTextBArray.Length);
crStream.FlushFinalBlock();
DecryptedStream.Position = 0;
byte[] output = new byte[DecryptedStream.Length];
DecryptedStream.Read(output, 0, (int)DecryptedStream.Length);
crStream.Close();
DecryptedStream.Close();
return encoder.GetString(output);
}
catch (Exception)
{
return string.Empty;
}
}
}
我的问题是虽然在DecryptTDES中,当数据已经在AES中时会捕获到异常,但也会触发我不想要的外部异常。
也许我正在犯这个错误...有更好的方法吗?我不能操纵数据库表或任何东西。
答案 0 :(得分:0)
解决问题的最简单方法是创建另一个表,并将AES加密数据复制到其中。这样,如果连接中断,您可以根据已传输的记录数简单地恢复。完成后,您可以重命名表格。
您还可以使用默认值FALSE
向表中添加布尔(或位)列,并在密码操作后为每行设置为TRUE
。