我确保字符串完整性的方法是否安全?

时间:2011-01-04 14:23:09

标签: android security md5 barcode hash

这是我在这里提出的第一个问题,如果我做错了,请告诉我!

我正在使用Eclipse构建Android应用程序,并使用条形码阅读器读取QR码。这一切都很好,但是,有时会有“特殊情况”条形码包含对用户的“奖励”。

此“奖励”包含在特殊格式的字符串中,此字符串可能会被打算欺骗系统的人篡改。这不是一个大问题,但我已经采取措施防止它,现在我的问题是......这些步骤有多安全?

以下是两个字符串示例:

***Code-v1.0:31c8f90a4050:1001:0:C:1337
***Code-v1.0:6a9c4e8d92da:1002:C4D23A1B:C:1337

字符串的格式如下:

***Code-v1.0:HASH:CODE_ID:REDEEM_ONCE:CODE_ACTION:ARG
(REDEEM_ONCE has 3 possible values)

我的哈希系统就像这样工作:

salt = "************:***"; // didnt think it wise to post this, but the length is
                           //  the same and its alphanumeric
MD5 = salt . ":" . codeParts[2] . codeParts[5] . codeParts[4] . ":" . codeParts[3] . ":";
MD5 .= codeParts[4] . codeParts[3] . ":" . codeParts[5] . codeParts[2];

这是一种安全的方法吗,代码似乎不会在不影响散列的情况下被篡改,但肯定是散列可以克服,如果有人制定了散列方案,那么这一切都变得毫无意义(这有点风险)只是'发现'它在服务器端,但如果有人想出来的话。)

你有什么想法?

1 个答案:

答案 0 :(得分:1)

如果您发送了部件和散列,但不是任何地方的盐(只是为了确定;)),您看起来就像是在正确的轨道上。 一些评论:

  1. 你为什么使用md5? SHA系列更安全。
  2. 我们的付款服务提供商最近开始格式化这样的字符串,以确保更长的字符串,其中碰撞(他们的推理)的可能性较小:
  3. codepart1.SALT.codepart2.SALT.codepart3.SALT等。

    从技术上讲,我认为它不会是一种盐,但仍然是..

    所以发送你的哈希和你的代码部分,并从codeparts和salt / secretstring中重新创建哈希值,然后你就可以了。

    我看到一个问题:你的秘密字符串必须是真正的秘密,它在你的应用程序中。所以逆向工程可以显示你的哈希是如何制作的,所以他们可以改变你发送的字段和哈希值?