小编And*_*rew的帖子

为什么我不应该在crypt()函数的salt中使用第23个字符?

我正在学习PHP的crypt()函数,并且已经用它运行了一些测试.根据这篇文章,我应该使用长度为22个字符的盐.但是,我可以使用长度为23个字符的字符串,但有一些限制.当我使用22个字符长的字符串时,我总是得到'$ 2y $ xxStringStringStringStri.HashHashHashHashHashHashHashHas'的结果.我知道这个时期只是盐的一部分.

似乎如果我使用23个字符而不是22个字符,我可以成功生成不同的哈希值,但所有64个字符只有4种不同的结果.第23个字符"向下舍入"到64字符字母表中最接近的1/4(例如,第23个字符为"W"并向下舍入为"O"或任何数字向下舍入为"u")

v---------------v---------------v---------------v---------------
./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890
Run Code Online (Sandbox Code Playgroud)

所有这四个crypt函数都生成相同的salt:

crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAq');
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAr');
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAs');
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAt');
Run Code Online (Sandbox Code Playgroud)

但这个是不同的:

crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAu');
Run Code Online (Sandbox Code Playgroud)

那么为什么我不能使用第23个字符才能成功产生不同的结果呢?在PHP中是否存在一些应该通过不使用它来避免的错误行为?

为了澄清我如何计算盐中的第23个字符:

crypt('Test123','$2y$08$ABCDEFGHIJKLMNOPQRSTUV');
//        The salt is '$ABCDEFGHIJKLMNOPQRSTUV'
//        Which will be treated as '$ABCDEFGHIJKLMNOPQRSTUO'
Run Code Online (Sandbox Code Playgroud)

php encryption crypt

9
推荐指数
1
解决办法
398
查看次数

如何将ES6默认参数从子类传递到其超类?

我有这个代码:

class Plant {
  constructor({name = 'General Plant', height = 0, depth = 1, age = 0}) {
    this.name = name;
    this.stats = {
      height: height,
      depth: depth,
      age: age
    };
  }
}

class Bush extends Plant {
  constructor({name = 'General Bush', height = 2, depth = 2}) {
    super(arguments)
  }
}
Run Code Online (Sandbox Code Playgroud)

但是调用的myBush = new Bush({})结果是一个名为"General Plant"而不是"General Bush"的对象.有没有办法在子类中设置默认值而无需this.name = name在构造函数中手动调用?

javascript ecmascript-6

5
推荐指数
1
解决办法
426
查看次数

标签 统计

crypt ×1

ecmascript-6 ×1

encryption ×1

javascript ×1

php ×1