如果你读了这个线程之前-忘了我写了, 我必须已经喝醉了的时候我写的。我开始:

我目前正在一个项目,我们将使用某种形式的算法为验证用户输入。有三个缔约方考虑;

客户浏览的网页

公司-我们处理客户要求

3缔约方的公司处理客户的消息

在我们的网页,我们将显示客户的一些信息产品。如果他/她希望有更多的有关产品的信息他有联系的3第三方公司和国家的产品代码(没有独特的本身,但是不常见或者)。在返回该客户将收到其他一些代码从第3个缔约方的公司,他应该输入我们的网页上,在那里我们会验证码批准。

最好的是,如果我们的公司,没有相互作用的第3次缔约方的公司。纯粹的加密了的画面,因为它会产生一个字符串太长。我们这样做是通过短信,这样的代码已被短。

我已经想出了迄今为止:

为每一产品的生成有些独特代码(如果这是唯一的或没有真正)在基16(0-f)。客户是谁想要更多信息产品发送短信的第3个方公司出产的产品代码。在返回的客户收到的同样的代码,但该数字都乘以(可能由2),并转化为基36.在这一最后一个加入到代码、数量控制,以使有效的代码为在卢恩算法在基36.用户进入接收的代码和我们的公司,验证它在服务器上面对的产品代码(验证对卢恩,除2和切回到基16条)。

这听起来是不合理的安全和合适?它是一个有效的方式发送消息三个缔约方,当他们两个不应该需要进行沟通?

遗憾的编辑,但我心里必须有其他地方的时候我写的第一章。

有帮助吗?

解决方案 5

经过与三方公司的长时间辩论,我们得出结论,如果他们将客户短信传递给我,最好的解决方案是,我会生成一个新的代码并将其发回给他们,然后又向他们发送新的短信给客户端使用我生成的代码。从我的观点来看并不是最优的,但至少我现在可以用我想要的任何方式来做。

感谢您的投入。

其他提示

我认为你很困惑,例如,如果你使用Luhn算法,它只会在校验和上返回 True False 。您提供的示例代码似乎表明您希望得到一些校验和结果(例如12345),可以从两个不同的值进行哈希处理。这个问题会更加困难。

第三方如何创造这个价值?你会给他们一些Javascript代码供他们执行,还是其他一些语言?你有没有一个共享密钥,他们可以使用该密钥对称加密值,你可以让他们用他们加密的部分加上一些已知值,这样你就可以快速验证它。

他们的代码:

  to_send = encrypted(shared_key, 'check' + code)

您的代码:

  unencrypted = decrypt(shared_key, to_send)
  if not unencrypted.startswith('check'):
    return False # failed check

好的所以你不想要之间的相互作用的其它应用程序和应用程序。和你想的限制的密码6个字符。这里是我的想法:

  • 使用10字符,,这将使暴力攻击,更难;
  • 使用所有的拉丁字母和数字的-会给你36可能符值;
  • 为什么不用一些大的数字图书馆和简单的乘你的代码(采取作为一个Base36号)通过一些可笑的大价值(说,2048随机的位)。然后将它转换Base36,并采取最近的10位数字。或者也许第5和最后5.或者,也许一些其他的组合取决于原始代码。我不知道如何保密性强这将是(可能不会很多),但这种努力破解密码将doubtfuly比,只需支付的服务。
  • 或者你可以盐(预先准备的一些秘密string)代码然后计算MD5。Return MD5(或一些N characters it)的用户作为你的代码。这应该是相当密码好吧,虽然我没有专家。通过转换MD5结果Base36你可能会增加强度的这种算法。

为什么一个"校"?不能将第3党运行任何小小的实用工具,给他们?所有你需要的是一个5位数字的加密程序,第3次缔约方可以在计算机上运行、饲料产品代码进入,并向5位结果要客户的密码。

加密程序始终产生相同的结果,从相同的输入。

然后,客户发送你的产品代码和密码。你跑的产品编码,通过一个精确复制的那个加密程序,并比较,结果到钥匙密码。

安全这个系统的增强可以在不改变基本结构。

-Al。

编辑之后一些澄清:

我仍然认为,产品代码和匹配的第3个缔约方响应不能是恒定的,否则它可能是共享将其他用户,它将因此能够得到响应的代码没有去第3次缔约方。

如果产品代码是恒定的,一个可能的办法是,第3次缔约方响应取决于 代码和用户的电话号码的,所以是你的验证。这种方式,每一个反应是这两种产品和用户具体。

具体排列的卢恩算是不是太重要了,在我看的-如果有人可以破解的一个变化中,他将可能破解的另一个之一。

原来的答案:

总之,我想你可以使用的卢恩的算法,如果得到用户的一次票,有效的数量有限的时间。

  • 首先,如果我理解问题是否正确,您的产品编码,不能恒定的,否则应由第3次缔约方会永远是相同的,为这种产品。这意味着用户将能够使用这个代码后再次,或甚至把它给另一个用户。
  • 因此,我认为你应该产生并得到用户的一个随机的新代码按他的要求的信息/访问的产物。该代码应有效用于这种产品用于有限的一段时间(一个小时,一天,这取决于你的需要)。
  • 发送的响应第3次缔约方用户应该是有效的,只有当一起输入的代码提供给用户。
  • 后验证,这种代码不能使用,直至指定的时间期结束。
  • 作为一个选项,我认为你和第3次缔约方可以添加的东西喜欢现在的日期,以代码和应对在计算,所以他们并不总是同一对。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top