Drupal的默认密码加密方法是什么?

2022-08-30 10:42:23

我试图弄清楚Drupal 6 / 7默认用于存储密码的安全性是什么。是MD5,AES,SHA吗?我一直找不到任何东西。


答案 1

Drupal 8 和 Drupal 7 默认使用 SHA512 和盐。他们通过PHP的哈希函数多次运行哈希,以增加生成密码最终哈希的计算成本(一种称为拉伸的安全技术)。

在Drupal 8中,实现是面向对象的。有一个密码接口,它定义了一个哈希方法。该接口的默认实现位于 PhpassHashedPassword 类中。该类的哈希方法调用在SHA512中传递的加密方法作为哈希算法,密码和生成的盐。该类的crypt方法与Drupal 7的_password_crypt()方法几乎相同。

在Drupal 7中,实现被分成几个全局函数:user_hash_password()_password_crypt())。

Drupal 6使用不含盐的MD5。相关函数为 user_save()。


答案 2

下面是来自 Drupal 7 的示例哈希:

  • “pass” : “$S$Dxl65W9p07LfQU7jvy5CnsyDpMoLujiAgzy123khcg1OJi/P9pKS”

  • 字符 0-2 是类型 ( $S$ 是 Drupal 7 )

  • 字符 3 是基于此列表中字符位置的 log2 轮数 (X):'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' 因此在我们的示例中,“D”将映射到 15
  • 字符 4-11 是 SALT
  • 其余的是使用2^X轮次的SHA512哈希。
  • 然后使用 base64 将二进制结果转换为字符串。

    $count = 1 << $count_log2;
    $hash = hash($algo, $salt . $password, TRUE);
    do { $hash = hash($algo, $hash . $password, TRUE);
    } while (--$count);

整个过程可以在以下位置找到:mydrupalsite\include\password.inc


推荐