最近本人新开发了一个网页软件,中文名叫 “猜猜我说了什么”。它允许你输入一段话,等待完成计算后,分享当前页面给别人,别人就可以猜你刚才输入的内容。别人只能知道是才对还是猜错,没有介于两者之间的提示。你所说的内容不会被传输,非常安全,因为它只会在你自己的浏览器中生成。
其实就是通过算加盐的 Hash 的方式,最后把盐和 Hash 都放在 URL 里,然后分享当前页给别人,别人就能猜了。
这个软件使用了 Web Cryptography API,可以看出,现在在大多浏览器里都支持了。我使用它生成一个 Key ,然后把这个 Key 作为 Salt 对用户所输入的文本进行 SHA-256 的计算,这个计算是重复很多次的,若使用 SHA-256-short-v4 这个算法,就意味着是重复计算 65536 次,这在 Mac 上的 Safari 上通常不到 5 秒就能完成计算。当将其分享出去让别人猜时,别人每猜一次,就要经历一遍相同方式的计算。所以暴力破解几乎是不可能的。为了适应移动端以及其他低端设备,还有 v0 ~ v5 不同的算法,重复计算次数为 16 的 N 次方,比如 v3 就是计算 4096 次。 short 的意思代表完成计算后会将算出的 Hash 截取,这样可以让 URL 更加简短。
本人没学过加密,于是就自己创了这种方法。这种重复计算应该还是有点效果的,至于有多少,我不清楚。之后直接换 PBKDF2 算法应该会好一些吧。
谈一谈自己所想到的用处
选择一个你喜欢的速度即可:
如果在微信里使用,扫码即可。建议使用 v1 或 v2 ,因为移动设备比较慢,而且通常不会用 GPU 算 Hash 。
SHA-256-short-v2 较慢速
SHA-256-short-v1 快速
GitHub 上有源码,使用了 JQuery 和 text-encoding ,网页全静态。
图片
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.