【问题标题】:Is there an encryption method for a column with a data type of int?数据类型为 int 的列是否有加密方法?
【发布时间】:2011-01-30 16:28:21
【问题描述】:

场景是我想在 sql server 表中加密数据类型为 int 的列中的财务数字。 这是一个大应用程序,因此很难将表列数据类型从 int 更改为任何其他数据类型。

我使用的是 sql server 2005 和 asp.net C#。

对于数据类型为 int 的列,是否有双向加密方法?

我可以在 sql server 2005 中使用用户定义函数还是使用 C# 方法?

【问题讨论】:

  • 你想在这里实现什么?似乎不明智,我真的不知道如何回答这里的“否”或“是”。
  • 我为您担心,您的应用程序中可能存在一些严重的安全设计缺陷。也许如果您提供有关您希望以这种方式实施安全性的原因的上下文,我们可以为根本原因问题提供解决方案。
  • @John Sansom:场景很简单。出于安全原因,我们希望我们的财务数据在数据库中加密。
  • 加密数据库中的单个列是不安全的,不管你怎么做。

标签: c# sql-server sql-server-2005 encryption


【解决方案1】:

很抱歉,我根本看不出在数据库中加密数字的基本原理。如果你想保护数据不被窥探,SQL Server 肯定内置了安全性,是吗?

在这种情况下,请使用标准安全性保护数据库。如果没有,请获得更好的 DBMS(尽管如果有必要我会感到惊讶)。

如果您希望提供该表中的 信息(如某些列但不是其他列),请使用视图或触发器来更新另一个表(安全性较低),或定期转移到该表。

【讨论】:

  • 您可以获取数据库文件并检查原始二进制文件以获取有价值的信息。这将绕过标准安全性,除非整个数据库都被加密,我认为这需要企业版。您可以使用 SQL Server 加密单个列,但很难将它们与实体框架一起使用。
  • @Ian,我认为您的重要服务器应该是物理安全的。否则,您只需与他们一起走就可以对公司进行 DOS。同样,到服务器的网络路径也应该受到同样的保护,例如,您不能随意 telnet 到它们。
  • 显然索尼丢失了 12,700 个未加密的银行卡号。
【解决方案2】:

XOR?

:)

嗯,需要更多文字...

 

【讨论】:

  • XOR 不太好,因为相同的值会导致相同的加密值。并且“关闭”整数也将导致关闭值。 (除非您对每一行使用不同的 XOR)。
  • 因此在答案之后是:)。
【解决方案3】:

.Net 中提供了几种双向加密方案。

Simple insecure two-way "obfuscation" for C#

您可以将整数转换为等效的字节数组,也可以将其转换为 base-64 字符串并对其进行加密。

【讨论】:

  • 不过,它们都不是从 int 到 int。这是主要问题。在任何明智的方案中,结果都是关键。对于 Int 到 Int 加密选项,替换表是我能想出的唯一解决方案,这将有 40 亿个条目;)或一些位移(如 XOR),但这几乎不能算作加密。
  • 是的。主要问题是“从 int 到 int”。
  • 迈克你为什么要那样做?加密的数据应该是无用的。鉴于此,您为什么要关心加密结果的类型?
  • 因为它是一个老大的应用程序,很难改变列类型。
  • 这没有任何意义。如果您的大型旧应用程序期望未加密的值,那么您仍然必须在任何地方进行更改以使其期望加密值。而且,如果您要这样做,更改字段类型也不是一件容易的事。
【解决方案4】:

嗯,从 int 到 int 的每个 injectivesurjective 函数都可以用作“编码”整数的一种方式。

您可以通过使用f(i) = a[i] 创建一个包含 65536 个项目且没有重复条目的随机数组来构建这样的函数。要“解码”您的 int,您只需使用 b[i] = x | a[x] = i 创建另一个数组。

正如其他人所提到的,这可能不是您真正想要做的。 =)

编辑:查看 Jim Dennis 的评论!

【讨论】:

  • 这个问题是相同的值将导致相同的加密值。所以你仍然可以找到薪水相同的人。
  • 您可以使用包含盐的额外列来完成此操作。如果盐值足够大(例如 32 个随机值),那么您几乎可以消除所有碰撞。 (我什至可以对 salt 列设置一个 UNIQUE 约束,由 RDBMS 引擎强制执行)。总的来说,这里的想法仍然很荒谬......但理论上......
【解决方案5】:

你可能想看看format preserving encryption

【讨论】:

  • 有没有在 C# 或 sql 中使用“格式保留加密”的代码示例?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2021-03-09
  • 2020-10-22
  • 2010-10-31
  • 1970-01-01
  • 2020-05-10
相关资源
最近更新 更多