Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 存储加密字段数据的最佳数据类型_C#_Sql_Encryption_Query Optimization - Fatal编程技术网

C# 存储加密字段数据的最佳数据类型

C# 存储加密字段数据的最佳数据类型,c#,sql,encryption,query-optimization,C#,Sql,Encryption,Query Optimization,我有一个sql数据库,需要存储一组必须快速查询的人口统计个人数据 要求规定数据必须加密,因为它是个人信息,但也必须进行搜索以允许记录匹配 我的问题是,我应该将这些字段定义为哪些数据类型,哪些字段将存储加密数据?它们应该是varchar还是varbinary 我的想法是,varbinary将减少将加密数据转换为base64字符串的代码中不必要的开销,但是在sql中查询此数据要比查询varchar字段慢得多。我不确定varbinary字段如何处理非聚集索引 [编辑] 我的问题实际上是针对查询性能的。

我有一个sql数据库,需要存储一组必须快速查询的人口统计个人数据

要求规定数据必须加密,因为它是个人信息,但也必须进行搜索以允许记录匹配

我的问题是,我应该将这些字段定义为哪些数据类型,哪些字段将存储加密数据?它们应该是varchar还是varbinary

我的想法是,varbinary将减少将加密数据转换为base64字符串的代码中不必要的开销,但是在sql中查询此数据要比查询varchar字段慢得多。我不确定varbinary字段如何处理非聚集索引

[编辑]
我的问题实际上是针对查询性能的。在比较字段是否相等时,存储varbinary数据会影响查询性能吗?

您需要保护数据库作为一个整体,而不是单个字段。否则您将无法查询它们。

我过去所做的是计算加密数据的散列,并将其存储在另一列中。散列可以是一个varchar字段,您可以对其进行索引。总的来说,我认为与varbinary搜索相比,varchar字段可以提供更好的查询性能。

我理解。这不是一个问题,因为只需要进行精确的比较。查询性能是我主要关心的问题。我需要能够尽可能快地匹配这些字段上的记录。许多RDBMS允许数据库对单个列进行加密,从而免除了手动加密数据的麻烦。检查您的文档,查看您的系统是否支持此功能,以及如何查询存储在该数据中的数据。严格来说,这不是事实。查询的确切字段比较是可能的,这是我所需要的。保护整个数据库还有其他问题。我认为数据在传递给db之前应该加密。DB encyption作为一个整体,仅在以某种方式获取文件时才保护它,但其他攻击将意味着数据被破坏。然而,存在其他技术来保护有线数据,如您所描述的HTTPS。当通过任何方式获取SQL登录时会发生什么?攻击者将拥有可用的纯文本记录。我接受你关于HTTPS的观点,但我担心的是数据,通过网络传递数据是要处理的。我理解你的意思,但你需要在某个地方划清界限。如果加密了所有字段,但攻击者获得了密钥,会发生什么情况?是否加密密钥?你所说的有着巨大的负面影响,但是像密码这样的数据可以被散列(因为原始数据丢失了)。这不是你想要的。我实际上也在一组强制参数上这样做,不幸的是,我需要添加一些其他参数以进行进一步的可选筛选。