运行时间较长但易于验证的算法?

2024-02-12

我正在设计一个网站进行实验,会有一个按钮供用户使用must点击并按住一段时间,然后松开,然后客户端向服务器提交AJAX事件。

但是,为了防止自动点击机器人和快速垃圾邮件,我希望保持时间非常真实且不可跳过,例如做一些计算。重点是浪费实际的 CPU 时间,这样您就不能简单地猜测 AJAX 回调值或调高系统时钟来绕过它。

有没有什么算法可以

  1. 快速且轻松地生成挑战在服务器上
  2. 在客户端执行需要花费一些时间,没有欺骗或缩短时间。
  3. 轻松快速地验证response服务器上的结果?

您正在寻找一个工作量证明系统 http://en.wikipedia.org/wiki/Proof-of-work_system.

最流行的算法似乎是Hashcash http://www.hashcash.org/(也于维基百科 http://en.wikipedia.org/wiki/Hashcash),用于比特币等。基本思想是要求客户端程序找到具有一定数量前导零的哈希值,这是他们必须用蛮力解决的问题。

基本上,它的工作原理是这样的:客户端拥有某种令牌。对于电子邮件,这通常是收件人的电子邮件地址和今天的日期。所以它可能看起来像这样:

[email protected] /cdn-cgi/l/email-protection:04102011

客户端现在必须找到一个随机字符串放在前面:

[email protected] /cdn-cgi/l/email-protection:04202011

这样它的哈希值就有一堆前导 0。 (我的例子不起作用,因为我只是编了一个数字。)

然后,在你这边,你只需要接受这个随机输入并运行single对其进行哈希,检查它是否以一堆 0 开头。这是一个very快速操作。

原因是client必须花费大量的 CPU 时间来找到正确的哈希值,这是一个暴力问题。唯一知道要做的就是选择一个随机字符串,对其进行测试,如果不起作用,请选择另一个字符串。

当然,由于您不处理电子邮件,因此您可能希望使用某种不同的令牌,而不是电子邮件地址和日期。但是,就您而言,这很简单:您只需在服务器端编写一个随机字符串并将其传递给客户端即可。

这种特定算法的优点之一是调整难度非常容易:只需更改所需的前导零数量即可。您需要的零越多,客户端花费的时间就越长;但是,您的验证仍然需要相同的时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

运行时间较长但易于验证的算法? 的相关文章

  • 数学/算法使图像适合屏幕保留纵横比

    我需要数学 算法方面的帮助来拍摄已知尺寸的图像并适合两个屏幕尺寸之一 720 x 480 或 1280 x 1024 图像尺寸来自 XML 文件 但这些尺寸是 Web 尺寸 我还从 XML 中选择了一些图像 这些图像的分辨率可能比 Web
  • 动态规划 (DP) 中的重叠子问题是什么?

    为了使动态规划适用 问题必须具有两个关键属性 最优子结构 and 重叠子问题 1 https en wikipedia org wiki Dynamic programming 对于这个问题 我们只关注后一个属性 有各种不同的定义重叠子问题
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 如何计算排列? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个关于 Java 排列的问题 Suppose I have five different elements in an arra
  • 使用到达时间差对信号进行三边测量

    我在寻找或实现寻找信号源的算法时遇到一些麻烦 我的工作目标是找到声音发射器的位置 为了实现这一点 我使用了三个麦克风 我正在使用的技术是多点定位这是基于到达时间差 The 到达时间差使用发现每个麦克风之间互相关接收到的信号 我已经实现了算法
  • 找到一个数是素数,为什么检查到n/2更好。避免n后半部分的数字的原因是什么

    要检查一个数是否是素数 最简单的方法是尝试将这个数除以 2 到 n 如果任何操作得到余数为 0 那么我们就说给定的数不是素数 但最好只进行划分和检查直到 n 2 我知道更好的方法是直到 sqrt n 我想知道跳过后半部分的原因 假设我们是否
  • 如何在 Unity 中对齐“轨道”或模块化对象?

    我正在开发一个简单的游戏 用户可以在其中放置不同但模块化的对象 例如 轨道 道路等 我的问题是 当将一个物体靠近另一个物体时 如何匹配和放置不同的物体 我的第一种方法是为每个模块对象创建一个隐藏的子对象 一个盒子 并将其放在可以放置其他对象
  • 优化重叠矩形的绘制

    我有很多矩形 有些与其他矩形重叠 每个矩形都有一个绝对 z 顺序和一个colour 每个 矩形 实际上是粒子效果 网格或纹理的轴对齐边界框 并且可能是半透明的 但只要您不尝试剔除其他矩形后面的矩形 就更容易抽象地思考彩色矩形 所以我将在问题
  • 压缩很多小字符串的算法?

    我正在寻找一种压缩小 ASCII 字符串的算法 它们包含大量字母 但也可以包含数字和很少的特殊字符 它们很小 平均约为 50 100 字节 最多 250 个字节 例子 Android show EditText setError above
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • 将数字的各个数字部分相加/求和的最快方法

    不久前 我在数学论坛上看到一个问题 其中一个人正在讨论一遍又一遍地将数字中的数字相加 直到达到个位数 即 362 将变成 3 6 2 这将变成 11 然后 11 将变成 1 1 将变成 2 因此 362 将返回2 我写了一些很好的代码来得到
  • 数字求和的算法?

    我正在寻找一种数字求和的算法 让我概述一下基本原则 假设你有一个号码 18268 1 8 2 6 8 25 2 5 7 7 是我们的最终数字 它基本上是将整个数字中的每个数字相加 直到我们得到一个 也称为 核心 数字 它经常被命理学家使用
  • 求一根棒可以切割的最大片数

    这是完整的问题陈述 给定一根长度为n的绳子 你需要找到最大的绳子数你可以让每一段的长度都在集合 a b c 中给定三个值a b c 我知道可以通过动态规划来实现最优解 但是 我还没有学过这个主题 我需要递归地解决这个问题 对于递归 主要的事
  • 整数除法性质

    下面的整数算术性质成立吗 m n l m n l 起初我以为我知道答案 不成立 但现在不确定 它适用于所有数字还是仅适用于某些条件 即n gt l 该问题涉及计算机算术 即q n m q m n 忽略溢出 Case1 assume m kn
  • 如何以 HH:MM 表示小数时间

    我有一个十进制格式的时间 22 13以小时为单位 我想在 R 中将其表达为HH MM 我是说 22 08 贬值秒 有人可以帮助我吗 语法 02 0f是将值四舍五入为整数并使其始终为 2 个单位 所以 7 8分钟将转换为字符 08 x lt
  • 逐字遍历句子

    如何逐字遍历任何给定的句子 java中有内置函数吗 我不知道如何开始 像这样的事情 String sentence Your sentence here String words sentence split s splits by whi
  • 查找重叠事件/时间的算法

    在处理自定义日历时 我不知道如何找到与任何其他时间段重叠的时间段 时段从 0 点至 720 点 上午 9 点至晚上 9 点 每个像素代表一分钟 var events id 1 start 0 end 40 an event from 9 0
  • 为什么我们需要检测链表中的循环

    我看到很多关于如何检测链表中的循环的问答 但我想了解的是我们为什么要这样做 换句话说 检测链表中的循环的实际用例是什么 在现实生活中 您可能永远不需要检测链表中的循环 但是执行此操作的算法很重要 我在现实生活中多次使用它们 例如 我经常会递
  • O(n^2) 与 O (n(logn)^2)

    时间复杂度是O n 2 or O n logn 2 better 我知道当我们简化它时 它就变成了 O n vs O logn 2 and logn lt n 但是关于logn 2 n is only less than log n 2 f
  • 将数字 n 拆分为 k 个不同数字的总和

    我有一个数字 n 我必须将它分成 k 个数字 使得所有 k 个数字都是不同的 k 个数字的总和等于 n 并且 k 最大 例如 如果 n 为 9 则答案应为 1 2 6 如果 n 为 15 则答案应为 1 2 3 4 5 这就是我尝试过的 v

随机推荐

  • 无需事务日志即可恢复 SQL Server 数据库

    Given a SQL Server 2008 bak文件 有办法恢复吗仅数据文件来自 bak file 没有事务日志 我问的原因是该数据库的事务日志文件大小很大 超出了我可用的磁盘空间 我对交易日志不感兴趣 对任何未完成的交易也不感兴趣
  • 有 YAML 数据库吗?

    我非常喜欢 YAML 的数据模型 它保留了 JSON 的大部分简单性 并通过一些有时很重要的功能 例如自定义数据类型和引用 对其进行了扩展 那么有没有什么方法可以在 YAML 数据模型 或非常类似的东西 中存储大量数据并使用索引对其进行查询
  • D3:如何处理单个图表中的缩放和工具提示?

    我有一个可视化 本质上是一系列堆叠的条形图 每个条形图包含多个面板 例如 here https i stack imgur com IAX6o png是三个这样的条形图 每个都有四个面板 我已经成功实现了跨图表协调的平移 缩放功能 This
  • 获取 jinja2 模板中列表的长度

    如何获取 jinja2 模板中列表中的元素数量 例如 在Python中 print template render products 在jinja2中 span You have what goes here products span s
  • Django 可以在每个单元测试之间刷新其数据库吗?

    Django 1 2 beta 将在每个运行的测试之间重置数据库 这意味着每个测试都在空数据库上运行 然而 数据库并不flushed 刷新数据库的影响之一是auto increment计数器被重置 考虑一个通过主键从数据库中提取数据的测试
  • numpy.argmin 用于大于阈值的元素

    我感兴趣的是获取满足特定条件 在我的例子中为中等阈值 的一维 NumPy 数组中最小值的位置 例如 import numpy as np limit 3 a np array 1 2 4 5 2 5 3 6 7 9 10 我想有效地屏蔽所有
  • SQL Server 2005 和 SQL Server 2012 中选择查询的默认排序顺序

    SQL Server 2005 和 SQL Server 2012 中选择查询的默认排序顺序有区别吗 我有一个没有主键的表变量 当我在 SQL Server 2005 中对表变量执行选择查询时 将选择记录并根据其中一列按字母顺序显示 在 S
  • 如何将粘性 div 保持在固定标题下方

    我在我的项目中使用 Bootstrap 4 并且在固定导航栏下保留带有 sticky top 类的 div 似乎遇到问题 我尝试过使用 javascript 来替换滚动上的 css 但这似乎不起作用 我知道有一种方法可以为导航栏设置一个 i
  • 合并两个数据帧以按顺序获取每个数据帧的交替行

    我的数据框DATA is k l g 1 A 2004 12 2 B 2004 3 4 3 C 2004 4 5 另一个数据框DATA2 is i d t 1 A 2012 22 2 B 2012 4 8 3 C 2012 5 6 我想要得
  • 学习 UIScrollView 的基础知识

    我一直很难找到 UIScrollView 的好例子 即使是苹果的 UIScrollView Suite 我也觉得有点缺乏 我正在寻找一个教程或示例集 向我展示如何创建类似于 iPhone Safari 选项卡滚动的内容 当您从一个浏览器窗口
  • 相同域,不同文件夹 PHP 会话

    我想根据用户所在的文件夹设置不同的会话 ID 例如 我有域名https example com https example com其中有文件夹 app1 app2 等 每个应用程序文件夹内有多个文件 我想设置一个会话 ID 用于 app1
  • 找不到“算法”文件

    我正在尝试使用以下库在 Xcode 中创建一个简单的控制台应用程序 https github com marstone ingress ios tree master s2 geometry https github com marston
  • 使用格式规范迷你语言截断和填充

    我目前正在编写使用 Python 的代码 用空格填充字符串格式规范迷你语言 http docs python org 2 library string html formatspec print user lt 10 you re welc
  • 在其消费者中处理生成器异常

    这是后续处理生成器中抛出的异常 https stackoverflow com q 11366064 989121并讨论一个更普遍的问题 我有一个读取不同格式数据的函数 所有格式都是面向行或记录的 并且对于每种格式都有一个专用的解析函数 作
  • 创建zip时没有错误,但没有创建

    我编写此代码是为了创建一个 ZIP 文件并保存它 但不知怎的 它只是没有显示任何错误 但它也没有创建 ZIP 文件 这是代码 zip new ZipArchive time microtime true res zip gt open ma
  • 使用 hibernate 将 null 保存为 id [重复]

    这个问题在这里已经有答案了 我处于一个奇怪的位置 我需要保存 Id of an Entity as null 整个项目是使用 hibernate 和实体构建的 但对于这一遗留实体 表本身有一个触发器来生成 ID 因此 尝试插入除 null
  • 不使用 MFMailComposeViewController 发送电子邮件

    是否可以在iOS中发送电子邮件而不依赖于系统默认的邮件 消息传递接口 这与消息传递真的一样吗 您不能为消息创建自定义界面 而是使用 MFMessageComposerViewController 的默认界面 看看这个答案 锁定 MFMail
  • 如何读取 PHP 中的请求标头?

    我应该如何读取 PHP 中的任何标头 例如自定义标头 X Requested With IF 你只需要一个标题 而不是allheaders 最快的方法是
  • EaselJS 在鼠标悬停时更改颜色

    在笨手笨脚地在 HTML canvas 元素中实现了所有与鼠标和矢量相关的信息后 我切换到了 EaselJS 我已经习惯了 EaselJS 它真的很简洁 我特别喜欢这些容器以及它们使绘制嵌入形状变得多么简单 但是 我不知道你如何实现颜色变化
  • 运行时间较长但易于验证的算法?

    我正在设计一个网站进行实验 会有一个按钮供用户使用must点击并按住一段时间 然后松开 然后客户端向服务器提交AJAX事件 但是 为了防止自动点击机器人和快速垃圾邮件 我希望保持时间非常真实且不可跳过 例如做一些计算 重点是浪费实际的 CP