繁体   English   中英

解密数据并导出到Excel

[英]Decrypting data and exporting to excel

我有一个SQL服务器数据库,其中包含成千上万行的加密数据,但是,并非所有列都已加密。 我还安装了一个excel导出器,当激活该导出器时,它会遍历每一行,检查该行的每一列以查看它是否是加密cols之一,如果是则对其解密然后继续。

问题在于这涉及嵌套的foreach和检查系统,该系统确实很慢,并且随着DB的增大只会变得更糟。

这是一段很慢的代码示例,在下面的代码中,“ encryptedColumns”是字符串的List <>,是已加密字符串的列名。

这显然效率低下,但有人可以建议快速修复以加快速度吗?

foreach (DataRow dr in dtData.Rows)
{
    foreach (DataColumn c in dtData.Columns)
    {
        if (encryptedColumns.Contains(c.ColumnName.ToLower()))
        {
            if (!String.IsNullOrEmpty(dRow[c].ToString()))
            {
                string decryptedTitle = Encryption.DecryptStringAES( dRow[c].ToString(), 'AESKEY goes here');
                dRow[c] = decryptedTitle;
            }
        }
    }
}

一点点细节。 上面是动态创建一个excel文档的过程,我遍历所有行,当到达需要解密的列时,我对其进行解密等等。

可能有一个示例行,您可以在其中看到纯文本内容中明显加密的内容。

乔| Bloggs | “£$ D£” $ | 蓝色| “£$%^ FG£$ DF” £$

我将遍历各列,找到需要解密的列,然后对各列进行遍历,而不是遍历每一行并检查每一列(这是O(nxm)最佳情况下的时间复杂度,因为您经常检查n行和m列)值。

列优先方法的平均时间复杂度为O(Const xn) ~ O(n) ,其中Const是需要解密的列数, n是行数。 也就是说,您仅迭代需要解密的列,而不检查其他任何行/列。

我还将使用搜索和分页-显示表的一部分,并允许用户来回移动。 没有人能理解一张表,该表向用户抛出了数百万行,但是如果您一次显示100行,则允许分页并搜索未加密的数据,这将解决性能和可用性问题。

您可以尝试的另一件事是并发运行解密,前提是您不修改数据,因此不需要锁定,现在您可以运行多个线程为您解密数据集的不同部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM