You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PHP crypt生成的MD5哈希密码导入Google Cloud Identity Platform

核心问题

你使用PHP crypt() 生成的$1$开头的哈希属于 MD5-Crypt 算法,和你当前配置的普通MD5是完全不同的两种哈希规则,这是导入后验证失败的根本原因。

正确配置说明

MD5-Crypt的格式为$1$<salt>$<hash_body>,你示例中的哈希$1$AT$JGYIRSP7xIYmg1XSoJmvB1对应参数拆分如下:

  • 算法标识:1,对应GCP Identity Platform导入参数的CRYPT_MD5算法
  • 盐值:AT,不需要携带任何$符号
  • 哈希体:末尾的JGYIRSP7xIYmg1XSoJmvB1

修正后的导入代码

var admin = require('firebase-admin');

var app = admin.initializeApp({
  credential: admin.credential.applicationDefault()
});

admin
  .auth()
  .importUsers(
    [
      {
        uid: '31',
        email: 'user31@test.test',
        // 传入MD5-Crypt哈希体的二进制内容
        passwordHash: Buffer.from('JGYIRSP7xIYmg1XSoJmvB1', 'base64'),
        // 盐值仅传入纯文本AT
        passwordSalt: Buffer.from('AT'),
      },
    ],
    {
      hash: {
        // 算法改为CRYPT_MD5,匹配PHP crypt生成的$1$格式哈希
        algorithm: 'CRYPT_MD5',
        // MD5-Crypt默认迭代1000轮,无需修改
        rounds: 1000,
      },
    }
  )
  .then((results) => {
    console.log(results);
    results.errors.forEach((indexedError) => {
      console.log(`Error importing user ${indexedError.index}`);
    });
  })
  .catch((error) => {
    console.log('Error importing users :', error);
  });

之前配置错误的原因

  • 普通MD5算法是直接对输入密码做哈希,没有加盐迭代逻辑,和MD5-Crypt结果完全不匹配
  • BCRYPT算法对应$2$/$2a$开头的哈希格式,和你当前的$1$格式不兼容
  • 盐值不需要携带$符号,多余的符号会导致盐值不匹配,哈希验证失败

内容的提问来源于stack exchange,提问作者rickjerrity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:27:03