我想给客户一个随机的订单号,但使用0,1,2,...在后端。这样,客户将获得一个没有密码保护的订单状态URL和加密的订单号,并且他们不能通过加减1来查看其他客户的订单号。这可能会取代生成随机订单密钥的方案,检查所有先前订单中的唯一性,然后重新生成,直到唯一为止。当web服务器收到查看订单的请求时,它会解密订单编号并检索订单。
为了使URL保持简短,哪种“好的”加密算法具有最短的块大小?这个计划是个好主意吗?(如果我对苹果公司的员工if进行加密,以防止史蒂夫·乔布斯询问员工#0,那该怎么办?)
注意到所有包跟踪网站都允许您无需身份验证即可跟踪包。限制免密码订单状态页面上显示的信息量是可以的。
发布于 2009-02-04 20:15:20
出于安全原因,大多数块密码将使用大于32位大小的块。
但是,我发现了一个专门针对您正在做的事情的工具:Skip32
您可能会考虑使用GUID,但也许您有理由避免使用GUID。(比方说,你的应用已经完成了。)
Edit:实际上,如果GUID是允许的,那么就会给出128位的范围。您可以很容易地使用任何其他块密码。拥有更大空间的好处(以长ID字符串为代价)是您将有更多的保护,防止人们猜测ID。(并不是说订单ID本身就应该是安全令牌……)
发布于 2009-02-04 21:00:22
如果您的想法是只知道订单号(或URL)就足以获得订单信息,那么:
因此,为了方便在不登录的情况下单击check-my-order,您已经创建了永久的安全风险。
即使你让订单号空间变得很大,你仍然会遇到这样的问题:这些URL到处都是,可能是那些不应该得到它们的人所拥有的。
最好是要求登录会话才能看到任何内容,然后只向他们显示他们有权查看的订单。然后,您不必担心隐藏订单号或攻击者猜测订单号,因为仅仅订单号并不足以访问任何东西。
发布于 2015-04-06 05:28:17
最近,我开始使用Hashids的一组小型库。其思想是将一个数字或数字列表加密为散列字符串,如下所示:
12345 => "NkK9"
[683, 94108, 123, 5] => "aBMswoO2UB3Sj"这些库是由不同的作者用流行的编程语言实现的。它们也是交叉兼容的,这意味着您可以在Python中对数字进行编码,然后对其进行JavaScript解码。它支持盐,字母定义,甚至排除不好的单词。
Python:
hashids = Hashids(salt="this is my salt")
id = hashids.encode(683, 94108, 123, 5)JS:
var hashids = new Hashids("this is my salt"),
numbers = hashids.decode("aBMswoO2UB3Sj");这不是政府验证的加密,但对于一些不可预测的永久链接共享网站来说,这是完全足够的。
https://stackoverflow.com/questions/513056
复制相似问题