小编Chr*_*ton的帖子

HTTPS如何防止重放攻击?

当 HTTPS 会话启动时,会生成一个随机数来创建交换密钥(或类似的东西)。我不明白的是这如何防止重放攻击。

为什么攻击者不能重复真实客户端发出的所有请求?

这个答案声称这是不可能的,而这个答案则声称相反。我不明白攻击如何不可能,除非涉及随机数。

https man-in-the-middle replay

4
推荐指数
1
解决办法
3344
查看次数

为什么不为字符串散列表只是使用这种无碰撞功能?(包括在下面)

所以我有一个无碰撞的哈希函数(一个非常简单的函数),我想知道为什么没有使用像这样的无碰撞哈希函数.我猜它的原因必然是它占用了太多的空间或者其他东西,但我想知道真正的答案.

这是功能:

如果你有一个词w由N + 1个字符ß ñ SS N-1 ... SS 1 ß 0,然后定义哈希函数

H(w)的= 26 ñ*SS Ñ + 26 N-1*SS N-1 + ... + 26*SS 1 + SS 0.

其中,例如,a = 1,b = 2,c = 3,...,z = 26.

此函数没有冲突,因为它定义了String和整数之间的一对一映射.

问题当然是随着单词长度的增加,哈希码变得非常大.

一个可能的解决方案是:拆分长单词并使每个哈希码成为一个向量,第二个元素指向单词的其余部分(如果它被拆分的话,它又可以指向单词的另一部分)一旦).

所以我的问题是:为什么这没有实现?记忆的额外成本是否值得避免碰撞?这种方法是否因其他原因而变得很差?我是第一个想到这样做的人吗? (开玩笑说最后一个.)

java hash hashcode

3
推荐指数
1
解决办法
1344
查看次数

关于getchar()循环如何在内部工作的困惑

我已经包含了一个使用getchar()下面的示例程序,供参考(并非任何人都可能需要它),如果您愿意,可以随意解决它的问题.但我的问题是:

程序调用时究竟发生了什么getchar()

以下是我的理解(请澄清或纠正我):

  1. 调用getchar时,它会检查STDIN缓冲区以查看是否有任何输入.
  2. 如果没有任何输入,getchar会睡觉.
  3. 唤醒后,getchar会检查是否有任何输入,如果没有,则让它自己再次进入睡眠状态.
  4. 重复步骤2和3直到有输入.
  5. 一旦有输入(按照约定在结尾处包含'EOF'),getchar返回此输入的第一个字符并执行某些操作以指示下一次调用getchar应该从同一缓冲区返回第二个字母?我不太确定那是什么.
  6. 当除了EOF之外没有其他字符时,getchar是否会刷新缓冲区?

我使用的术语可能不太正确.

#include <stdio.h>

int getLine(char buffer[], int maxChars);

#define MAX_LINE_LENGTH 80

int main(void){

    char line[MAX_LINE_LENGTH];
    int errorCode;

    errorCode = getLine(line, sizeof(line));
    if(errorCode == 1)
        printf("Input exceeded maximum line length of %d characters.\n", MAX_LINE_LENGTH);
    printf("%s\n", line);

    return 0;

}

int getLine(char buffer[], int maxChars){
    int c, i = 0;
    while((c = getchar()) != EOF && c != '\n' && i < maxChars - 1)
        buffer[i++] = …
Run Code Online (Sandbox Code Playgroud)

c io internals getchar

3
推荐指数
1
解决办法
803
查看次数

添加事件侦听器的最佳做法

在我的页面上,用户单击一个元素以进行编辑.为了方便这一点,我将类分配editable给所有这些元素.

我应该如何听取所有这些元素的点击?目前,我这样做:

$lib.addEventListener(document.body, "click", function(event) {
  if($lib.hasClass(event.target, "editable") {
    // do stuff
  }
});
Run Code Online (Sandbox Code Playgroud)

这里$lib是一个小JS库我使用.

另一种方法是在每个元素上设置一个监听器,如下所示:

var editables = document.getElementsByClassName("editable");
for(var i = 0; i < editables.length; i++) {
    $lib.addEventListener(editables[i], "click", editElement);
}
Run Code Online (Sandbox Code Playgroud)

在我看来,第一种方式必须更好的性能,因为它只是一个元素被听,但是通过将所有这些事件附加到body元素是否可能降低性能?是否有任何其他考虑因素(例如,事件处理的浏览器实现)我忽略哪些会建议以第二种方式进行?

javascript event-handling event-bubbling

3
推荐指数
1
解决办法
4752
查看次数

评估 $PATH 时的波形符扩展

在我的系统上*

cd                                                 # move to home
mkdir tempdir
PATH="$PATH:~/tempdir"                             # put tempdir in path
touch tempdir/tempscript
echo -e '#!/bin/bash\necho h' > tempdir/tempscript # write script
chmod u+x tempdir/tempscript                       # make executable
tempscript                                         # execute
Run Code Online (Sandbox Code Playgroud)

将找到脚本tempdir/tempscript并打印h

然而,如果我们 echo $PATH,我们会看到~/tempdir它的末尾,所以它没有被扩展。这是我们期望发生的情况,因为我们在赋值周围加了双引号。

然而,我找不到任何关于为什么在评估 时会发生波形符扩展的文档$PATH。(请注意,PATH 变量中仍然包含~。)

这是可移植的行为吗?

* Mac OS X 带有 GNU bash 3.2

bash portability path-variables tilde-expansion

3
推荐指数
1
解决办法
667
查看次数

在 PHP 中获取更长的时区名称

给定像“EST”这样的时区缩写,我可以使用timezone_name_from_abbr. 是否有返回“东部标准时间”之类的函数?

php timezone abbreviation

3
推荐指数
1
解决办法
900
查看次数

主机名后面的 URL 部分的好名称是什么?

我正在解析包含主机名后所有内容的路径字符串,即路径、查询和片段。以前,我path在函数中调用了整个块parseUrlPath,但这有点令人困惑,因为我将内部部分和整个事物都称为path

也许这不是最糟糕的主意……我的意思是,我们对机器本身和在该机器上运行的程序都使用“服务器”一词。但是有人有想法吗?或者更好的是,引用路径/查询/片段的现有名称的参考?

url naming

3
推荐指数
1
解决办法
927
查看次数

有条件地省略bash中的命令行选项

我有一个长命令,在某些情况下需要修改以包括或不包括一个选项。

例如

java -jar compiler.jar --externs "$externs"
    --foo "another" --bar "more"
Run Code Online (Sandbox Code Playgroud)

--externs "$externs"如果$externs要清空,我希望将其完全省略。有什么方法可以在bash中执行此操作,而无需借助字符串来构建整个命令?

bash command-line-arguments

3
推荐指数
2
解决办法
440
查看次数

没有参数的#define指令有什么作用?

在Apple的开源网站上,stdarg.h条目包含以下内容:

#ifndef _STDARG_H
#ifndef _ANSI_STDARG_H_
#ifndef __need___va_list
#define _STDARG_H
#define _ANSI_STDARG_H_
#endif /* not __need___va_list */
#undef __need___va_list
Run Code Online (Sandbox Code Playgroud)

如果第一个参数后面没有任何内容,那么#define语句会做什么?

c header-files c-preprocessor preprocessor-directive

2
推荐指数
1
解决办法
364
查看次数

在PHP中为多个数组分配相同的key => value对

我正在尝试编写一个函数,为多个s 分配相同的key => valuearray.但是这项任务不会发生.

<?php

// for debugging
error_reporting(E_ALL);

// arrays is an array of reference arrays
function assignKeyValueToArrays($arrays, $key, $value) {

    if(!is_scalar($key) || !is_array($arrays)) {
        return false;
    }

    foreach($arrays as $array) {
        if(!is_array($array)) return false;
        echo "setting $key to $value";
        $array[$key] = $value;
    }

}

$s = array();
$t = array();

assignKeyValueToArrays(array(&$s, &$t), "a", "blahblah");

// should print array(1) {"a" => "blahblah"} but both print array(0) {}
var_dump($s);
var_dump($t);

?>
Run Code Online (Sandbox Code Playgroud)

对此的上下文是我有一个脚本,它正在进行数据库查询并将键分配给临时$queryParams数组和$jsonResponse数组.我可以做两个任务,但我想要一个更通用的解决方案,可以处理更多的数组.

php arrays foreach reference variable-assignment

2
推荐指数
1
解决办法
741
查看次数