计算困难的[JavaScript]问题?

计算困难的[JavaScript]问题?,javascript,complexity-theory,Javascript,Complexity Theory,我需要一个计算困难的问题(在任何语言中),我可以用JavaScript轻松实现。我正在尝试做一个类似验证码的测试,以使黑客不太可能机械地访问我的页面 是的,我知道他可以使用Rhino或其他JS引擎来做这件事——这就是为什么我希望它在计算上很昂贵,所以他需要几个小时来设置,他的机器需要几秒钟来伪造每次访问 我想在后端得到一堆大素数,然后发送其中两个的乘积,并要求网页将其考虑在内,但如果有人有更好的想法,我会洗耳恭听。还有,有没有人有一个很好的库来进行分解呢?您可以实现一个标准的验证码,并在客户端进

我需要一个计算困难的问题(在任何语言中),我可以用JavaScript轻松实现。我正在尝试做一个类似验证码的测试,以使黑客不太可能机械地访问我的页面

是的,我知道他可以使用Rhino或其他JS引擎来做这件事——这就是为什么我希望它在计算上很昂贵,所以他需要几个小时来设置,他的机器需要几秒钟来伪造每次访问


我想在后端得到一堆大素数,然后发送其中两个的乘积,并要求网页将其考虑在内,但如果有人有更好的想法,我会洗耳恭听。还有,有没有人有一个很好的库来进行分解呢?

您可以实现一个标准的验证码,并在客户端进行更多的检查。例如,在验证码输入文本上添加一个事件侦听器,以侦听按键向下/向上事件,并对按键代码进行异或,然后将其与验证码一起发送。在名为email的表单中添加隐藏的输入文本,或在每个表单中找到的内容。机器人会自动加满油。如果你得到post['email']的值,那么它就是一个机器人,因为用户看不到它。此外,您还可以在一个完全不相关的javascript中使用一段代码,自动以验证所需的形式添加一个字段。所以…验证码没有验证码,您仍然可以增强机器人保护客户端,而无需计算困难的过程

这个问题是,如果已知它是NP难的,那么对于人类来说,在非平凡的情况下解决它也是一件痛苦的事。视觉/听觉验证码有点酷,因为它们能让人们站起来。。。我们有非常复杂的感觉器官来处理这类事情,而计算机并不擅长(尽管它们一直在进步!)


因此,你最好想出一个独特的东西,人们可以很容易地做,但机器不太擅长。例如,给出一些简单的黑白图片,询问用户哪一张不属于,或者展示一些食物图片,询问您可以用它们制作什么样的食谱。

您可以使用与比特币相同的方法,即反转安全哈希

解释如下:

比特币来源
聪明的方法。每当需要单向复杂性时,我就会想到散列。只需对其用户帐户的某些方面(不敏感)进行散列,然后将散列发送给客户端。您可能希望截断/填充字符串以获得所需的复杂度级别。这并不是为了保护帐户,所以md5或任何其他哈希算法都可以


以下是一些您可以在客户端使用的验证码。

“类似于验证码”但不是验证码?为什么?@George Cummins这是机器的验证码,不是用户;-)[需要一定的时间和“智慧”才能弄清楚。虽然…用机器解决验证码…嗯。]@George Cummins真的吗?我讨厌CAPTCHA,它们太缺乏想象力了(真的);无限的困难。@JaniHartikainen——不是“永远”,只是几秒钟。用户转到我的页面,在他的CPU进行计算时显示一些我希望他看到的信息,然后浏览器提交结果,用户被重定向到其他页面@瑞安·贝内特——我需要一些东西,(a)它终止,(b)我可以证实他确实做了这项工作@乔治·康明斯——我猜谷歌不会给你一个50位数的数字。你在这里完成了一个倒转:我不想检查那里是否有真人,我想检查那里是否有真正的浏览器。我需要在计算上很难阻止大规模机器人运动。你没有抓住要点。人类永远不会看到这个问题。我只是想确保访问者的CPU能消耗数十亿个周期。另外,请参阅R C关于这一理论的真实应用程序的答案。大约两个月前,当我教授比特币课程时,我想到了这一点。因为我忘了回答我自己的问题,所以你得到了复选标记。