2016-11-29 34 views
0

我需要实现优惠券代码功能。由于所需的代码数量和一些其他限制,我无法将它们存储在数据库中。另外显示的代码需要很短(大约10个字符)。加密小邮件

我最初的想法是使用加密函数通过​​加密正在进行的计数器来创建代码。但我不知道要用什么方法。

由于计数器我只能编码几个字节,我知道很多算法在使用非常短的消息时是不安全的。

我的方法是一个好主意吗? 我可以使用什么算法?

+0

如果您非常关心安全性和防止欺诈,那么您确实应该发送唯一代码当他们尝试使用它时,验证属于特定用户帐户。 10个字符代码中的熵总量具有有限的限制 – Aaron

回答

2

我不确定这是不是你想要的,根据我的评论,你并没有真正的安全保证,但一个可能的答案可能是用一些数字来给一个prng发个号码,并且发出第一个x代码作为代码。只要x远小于可能的结果总数,重复的机会就很小,并且可以通过重新生成序列来验证代码(为了速度目的,您可能希望散列它的一部分)

如果使用基数62:[AZ AZ 0-9]和10个数字,则有超过839个可能的结果。如果您要为地球上的每个人提供一个独特的代码,那么您应该已经使用了您的可寻址空间的大约0.0000009%

+0

重新生成一百万个数字以验证某个优惠券代码是有效的,听起来很昂贵。至于你的评论:我写在我最初的问题,我不能存储优惠券代码在数据库中,我的意思是。 – Laures

+2

@Laures会在POS终端进行支票吗?或者是否所有的请求都会进入一台服务器?我得到了Python来生成1000万个随机数(0到62 ** 5),对它们进行排序,并在大约一秒钟内检查一个随机数。 – Aaron

+0

@Aaron和Python并不完全是一种快速语言。生成这些数字所花费的时间可以忽略不计。 +1为一个好的解决方案。 –