试图弄清楚数据是TDES还是AES加密

时间:2016-05-09 03:57:04

标签: exception encryption

我的问题是我需要将数据加密从数据库升级到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中时会捕获到异常,但也会触发我不想要的外部异常。

也许我正在犯这个错误...有更好的方法吗?我不能操纵数据库表或任何东西。

1 个答案:

答案 0 :(得分:0)

解决问题的最简单方法是创建另一个表,并将AES加密数据复制到其中。这样,如果连接中断,您可以根据已传输的记录数简单地恢复。完成后,您可以重命名表格。

您还可以使用默认值FALSE向表中添加布尔(或位)列,并在密码操作后为每行设置为TRUE