【问题标题】:How can I obfuscate/de-obfuscate integer properties?如何混淆/去混淆整数属性?
【发布时间】:2011-07-03 03:39:51
【问题描述】:

在某些情况下,我的用户将能够查看存储他们输入的数据的数据库表的网络版本。由于各种原因,我需要包含所有存储的数据,包括用于封装数据中相邻关系等的每个记录的多个整数标志(这是为了运行时的速度和方便)。但是,我不想在 web 视图中一对一地公开它们,而是希望有一个模糊的字段,它被称为“保留”,并包含一个难以理解的字符串,代表那些我可以轻松编码和解码的标志。

如何在 C++/Objective C 中有效地做到这一点?

谢谢!

【问题讨论】:

  • 让我进一步解释一下——数据在 Google 电子表格中提供给用户(“webview”可能具有误导性),因为我希望能够将数据读回作为原始移动应用程序,我希望将这些额外的“私人”数据包含在电子表格中,而不会分散用户的注意力或易于操作。

标签: c++ objective-c encoding obfuscation


【解决方案1】:

这个字段是否有必要以视觉方式向用户公开,或者只是在 webview 的 HTML 内容中无损捕获?如果可能,您能否将标志作为隐藏输入元素包含在每一行中,即<input type=“hidden” …

【讨论】:

  • 我认为如果它是一个真正的 web 视图会很好,但请参阅上面的说明。
【解决方案2】:

为什么不将每个字段转换为十六进制,并将它们作为字符串附加并保存该值?

只要您始终以相同的顺序附加字符串,将它们分开并将它们转换回数字应该是微不足道的。

【讨论】:

  • 这是我最喜欢的方法,而且非常简单。我将创建一个类似“%x%x%x%x%x”的字符串,flag1,flag2,flag3,flag4,(checksum = constval + flag1 + flag2 + flag3 + flag4)。可能的整数值的范围足够小,我可以依赖十六进制的标志值只有 1 个字符,因此很容易分解。谢谢!
【解决方案3】:

使用对称加密 (example) 对值进行编码和解码。当然,只有您应该知道密钥。
或者,Assymetric RSA 是更强大的加密,但效率较低且使用更复杂。

注意:我很好奇需要这种设计的“各种原因”......

【讨论】:

  • 谢谢——我可能会对此进行调查(并参见上面的说明)。我确实想知道这是否可能是矫枉过正。这并不是什么秘密,主要是我只是想避免分散用户的注意力,并避免在我不知情的情况下使用很诱人的值。如果他们将 4 更改为 5,我无法判断。我在想一个好的基本编码算法可以告诉我 aH7c1 是否已更改为 aH7c2 (因为后者无法解码)并且我需要重新计算邻接关系。对于真正的加密,我也担心会进入模糊的法律领域,而且是不必要的。
【解决方案4】:

将标志整数乘以 7,加 3,然后转换为 base-36。要检查结果字符串是否被修改,请转换回 base-2,并检查结果模 7 是否仍为 3。如果是,则除以 7 以获得标志。请注意,这会受到重放攻击 - 用户可以复制任何有效字符串。

【讨论】:

    【解决方案5】:

    只需计算一个 CRC-32(或类似的)并将其附加到您的值。这很可能会告诉您您的价值是否已损坏。

    【讨论】:

      猜你喜欢
      • 2015-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      相关资源
      最近更新 更多