首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪种“好”的块加密算法的输出最短?

哪种“好”的块加密算法的输出最短?
EN

Stack Overflow用户
提问于 2009-02-04 20:07:21
回答 7查看 6.9K关注 0票数 19

我想给客户一个随机的订单号,但使用0,1,2,...在后端。这样,客户将获得一个没有密码保护的订单状态URL和加密的订单号,并且他们不能通过加减1来查看其他客户的订单号。这可能会取代生成随机订单密钥的方案,检查所有先前订单中的唯一性,然后重新生成,直到唯一为止。当web服务器收到查看订单的请求时,它会解密订单编号并检索订单。

为了使URL保持简短,哪种“好的”加密算法具有最短的块大小?这个计划是个好主意吗?(如果我对苹果公司的员工if进行加密,以防止史蒂夫·乔布斯询问员工#0,那该怎么办?)

注意到所有包跟踪网站都允许您无需身份验证即可跟踪包。限制免密码订单状态页面上显示的信息量是可以的。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-02-04 20:15:20

出于安全原因,大多数块密码将使用大于32位大小的块。

但是,我发现了一个专门针对您正在做的事情的工具:Skip32

您可能会考虑使用GUID,但也许您有理由避免使用GUID。(比方说,你的应用已经完成了。)

Edit:实际上,如果GUID是允许的,那么就会给出128位的范围。您可以很容易地使用任何其他块密码。拥有更大空间的好处(以长ID字符串为代价)是您将有更多的保护,防止人们猜测ID。(并不是说订单ID本身就应该是安全令牌……)

票数 13
EN

Stack Overflow用户

发布于 2009-02-04 21:00:22

如果您的想法是只知道订单号(或URL)就足以获得订单信息,那么:

  • 订单号空间需要非常大,否则攻击者和/或客户将搜索订单空间,看看能看到什么。
  • 您应该考虑攻击者可能会从多台机器上启动逐步探测,并且可能会通过速率限制来减少订单号空间,但这在web环境中很难应用--很难区分您的客户访问和攻击者访问。
  • 还认为订单号并不是什么秘密,人们可能会通过电子邮件四处发送;一旦订单号出来,就不可能收回。

因此,为了方便在不登录的情况下单击check-my-order,您已经创建了永久的安全风险。

即使你让订单号空间变得很大,你仍然会遇到这样的问题:这些URL到处都是,可能是那些不应该得到它们的人所拥有的。

最好是要求登录会话才能看到任何内容,然后只向他们显示他们有权查看的订单。然后,您不必担心隐藏订单号或攻击者猜测订单号,因为仅仅订单号并不足以访问任何东西。

票数 4
EN

Stack Overflow用户

发布于 2015-04-06 05:28:17

最近,我开始使用Hashids的一组小型库。其思想是将一个数字或数字列表加密为散列字符串,如下所示:

代码语言:javascript
复制
12345 => "NkK9"
[683, 94108, 123, 5] => "aBMswoO2UB3Sj"

这些库是由不同的作者用流行的编程语言实现的。它们也是交叉兼容的,这意味着您可以在Python中对数字进行编码,然后对其进行JavaScript解码。它支持盐,字母定义,甚至排除不好的单词。

Python:

代码语言:javascript
复制
hashids = Hashids(salt="this is my salt")
id = hashids.encode(683, 94108, 123, 5)

JS:

代码语言:javascript
复制
var hashids = new Hashids("this is my salt"),
numbers = hashids.decode("aBMswoO2UB3Sj");

这不是政府验证的加密,但对于一些不可预测的永久链接共享网站来说,这是完全足够的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/513056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档