当前位置: 首页 > 面试题库 >

如何创建和使用随机数

禄仲渊
2023-03-14
问题内容

我正在运行一个网站,并且有一个计分系统,可为您提供玩游戏次数的积分。

它使用散列来证明http请求评分的完整性,因此用户无法更改任何内容,但是正如我担心的那样,有人发现他们不需要更改它,他们只需要获得高分并复制http请求,标头和所有。

以前,我被禁止防御此攻击,因为它被认为不太可能。但是,既然已经发生,我可以。http请求源自Flash游戏,然后由php验证,然后php将其输入数据库。

我很确定随机数会解决该问题,但是我不确定如何实现它们。建立随机数系统的常见且安全的方法是什么?


问题答案:

或者,如果您想编写自己的代码,这很简单。使用WikiPedia页面作为起点,使用伪代码:

在服务器端,您需要两个客户端可调用函数

getNonce() {
    $id = Identify Request //(either by username, session, or something)
    $nonce = hash('sha512', makeRandomString());
    storeNonce($id, $nonce);
    return $nonce to client;
}

verifyNonce($data, $cnonce, $hash) {
    $id = Identify Request
    $nonce = getNonce($id);  // Fetch the nonce from the last request
    removeNonce($id, $nonce); //Remove the nonce from being used again!
    $testHash = hash('sha512',$nonce . $cnonce . $data);
    return $testHash == $hash;
}

在客户端:

sendData($data) {
    $nonce = getNonceFromServer();
    $cnonce = hash('sha512', makeRandomString());
    $hash = hash('sha512', $nonce . $cnonce . $data);
    $args = array('data' => $data, 'cnonce' => $cnonce, 'hash' => $hash);
    sendDataToClient($args);
}

该函数makeRandomString实际上只需要返回一个随机数或字符串。随机性越好,安全性就越好。。还要注意,由于它是直接输入到哈希函数中的,因此实现细节在请求之间无关紧要。客户端的版本和服务器的版本不需要匹配。实际上,唯一需要匹配100%的位是用于hash('sha512', $nonce . $cnonce . $data);… 的哈希函数。这是一个相当安全的makeRandomString函数的示例

function makeRandomString($bits = 256) {
    $bytes = ceil($bits / 8);
    $return = '';
    for ($i = 0; $i < $bytes; $i++) {
        $return .= chr(mt_rand(0, 255));
    }
    return $return;
}


 类似资料:
  • 问题内容: 我想知道是否有一种方法可以选择随机生成的100和500之间的数字以及选择查询。 例如: 我不必将此数字存储在db中,仅用于显示目的。 我尝试过类似的方法,但是无法正常工作。 希望有人帮助我。谢谢 问题答案: 这应该给出您想要的: 通常,生成一个介于>和包含之间的数字。 更新资料 完整的声明应该起作用:

  • 问题内容: 我知道如果我使用, 给了我我想要的东西,但是带有正态分布的元素。但是,如果我只想要随机整数怎么办? 通过提供范围来工作,但不像提供数组那样工作。那么我该如何使用某个范围之间的随机整数呢? 问题答案: 接受第三个参数(),您可以在其中指定输出数组的大小。您可以使用它来创建- Here-创建一个大小为size的输出数组,其中的随机整数元素在之间。 演示- 产生:

  • 我还没有经验,这是我的第一语言,所以任何建议和提示都会受到欢迎。 我正在尝试创建一个抽奖计划,询问参与者人数,并根据最大人数抽取一名获胜者。我尝试了:

  • 当您导入java.util.random之后,您可以通过两种方式生成随机整数和随机double。 您可以创建Random类的一个实例

  • 问题内容: 这个问题:如何生成随机BigInteger描述了一种与BigIntegers实现与Random.nextInt(int n)相同的语义的方法。 我想对BigDecimal和Random.nextDouble()做同样的事情。 上述问题的一个答案建议创建一个随机的BigInteger,然后从中以随机的比例创建一个BigDouble。一个非常快速的实验表明这是一个非常糟糕的主意:) 我的直

  • 问题内容: 我创建了以下方法,以便创建唯一的随机数。(此唯一值属于树的节点): 但这并不会创建唯一的数字,并且我的列表中仍然有重复的数字。喜欢 : 问题答案: 问题是,如果它发现重复的数字,您不会在检查函数中停止for循环。循环继续进行,b可以变回true。 例如,您应该做的是: