【发布时间】:2019-09-23 19:39:06
【问题描述】:
我正在为 IT 技术服务开发一个简单的管理系统。该系统有一个网站,客户可以通过输入他们的唯一代码来检查他们的订单的当前状态。当然,这段代码必须是唯一的,并且希望不容易(手动)暴力破解。
我想在“XKF-042”行的某处输出一个易于阅读和写下的输出。问题出现在这些值的生成上:我可以使用纯随机数据并生成两段代码,但这迫使我检查代码是否已经存在,这感觉就像是资源的指数浪费。
一个简单的答案是从任意数字开始计数,比如“ABC-001”,然后加 1,因此不需要检查该值是否已经存在。问题在于暴力破解的容易程度。任何人都可以检查 ABC-XXX 并检查最后一千个连续订单。
数学不是我的强项,但我知道必须有一个更优雅的解决方案来解决这个问题。
我正在考虑为代码的每一侧生成每一个可能的排列并将它们打乱,所以我有一个可以读取的对列表,看起来是随机的,并且可能每移动一次“代码的右侧”列表1000 个代码。
编辑:无法猜测代码并不重要;除了订单信息和成本外,输出不会有任何个人信息。我可以使用 4x4 代码(如“SJDM-4823”)使其“更强大”。
【问题讨论】:
-
您对生成的代码的长度有限制吗?显然,如果有人必须输入它可能不应该太长。
-
将问题分解为 a) 生成唯一标识符,b) 生成易于记下/拼写的标识符,c) 生成难以猜测的标识符。每个都可以用一堆方法来解决,这取决于优先级是什么
-
你使用什么编程语言?
-
我是用PHP做这个的,除了可用性之外对大小没有真正的限制,但是从100万个代码开始听起来就足够了