【问题标题】:Obfuscating an integer column混淆整数列
【发布时间】:2012-12-29 17:20:06
【问题描述】:

我本可以将其发布到 SQL 论坛,但我更愿意寻找一个想法或最佳实践,这就是我选择这个论坛的原因。 我在 SQL 中有一个名为 Payroll Number 的整数列,它对员工来说是唯一的。我们将通过 SQL 视图从该系统查询员工信息并将其放入另一个系统,但我们不希望工资单号码像在该系统上那样出现。因此,我们需要在 SQL 上对这些工资单数字进行哈希处理,以便视图将提供哈希后的用户友好数字。

我花了很多时间阅读 SQL 中的加密技术,但它们使用复杂的算法来散列数据并生成二进制文件。但我所追求的是不那么复杂和混淆数字而不是散列。

例如,工资单号码是 6 个字符长(145674),我希望能够从这个号码生成大约 9-10 个字符长的整数并在其他系统上使用它。

我查看了 XOR'ing,但我需要更健壮和优雅的东西。

你们是怎么做这些事情的?你写你的简单算法来混淆你的整数吗?我需要在 SQL 级别上执行此操作,您有什么建议?

感谢您的帮助

问候

【问题讨论】:

  • 我猜你需要能够反转“哈希”,否则为什么要显示数字。既然是这种情况,您不是对数字进行散列而是对其进行加密。细微的差别。加密可以因平台而异。你用的是哪一个?
  • 我认为我不需要反转它,但是我将使用的算法需要生成相同的数字,无论平台如何,因为该数字将在其他系统中使用

标签: tsql encryption obfuscation


【解决方案1】:

散列一个值并不难,但很难散列一个值并确保唯一性并使其成为一个数字。不过,我确实有一个跨数据库解决方案。

创建一个新表 - 有两列,id(从随机起点自动生成)和工资单 id。

每次您需要使用外部用户时,将其插入此表中。这将为您提供一个可以使用(内部和外部)的本地唯一 ID,但它不是工资单 ID。

事实上,如果你已经有一个内部 id(例如用户表中的用户 id),只需使用它。如果从未解码此值,则散列该值没有任何优势。但是,您可以使用 id 的 autogen 作为随机唯一哈希——它具有您需要的所有属性。

【讨论】:

  • 问题在于我们无法访问该数据库服务器,它是 HR 数据库,只有某些人需要访问数据库。我们提供了视图,仅此而已.. 对数据库的任何更改都需要应用程序供应商参与,这需要很长时间...您认为 XOR ing 是一个坏主意吗?
  • 并不是 XOR、rot13 或 base64 不好……只是它没有提供任何安全性。任何对散列/加密稍有了解的人都会立即看到它。最好做一些简单明了的事情,比如乘以 10+1 然后反转数字。 (请注意,由于前导 0 问题,您已将 1 放在末尾。这不是很好的安全性,但它与任何其他“简单”的安全性一样好,至少它是最简单的。
猜你喜欢
  • 2011-07-03
  • 2015-01-26
  • 2014-12-30
  • 2011-02-03
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多