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

将PHP的crypt()函数转换为Node.js实现遇到问题求助

解决PHP crypt()到Node.js的哈希兼容问题

问题分析

你PHP代码里用的是SHA-512加密算法(由$6$标记),指定了迭代次数rounds=20000,固定盐值xtreamcodes。Node.js自带的crypto模块没有直接对应crypt(3)的SHA-512实现,需要用第三方库来匹配。

具体实现步骤

1. 安装依赖库

使用crypt3库,它直接实现了Unix crypt(3)函数,完美匹配PHP的crypt()行为:

npm install crypt3

2. 实现哈希生成与验证函数

替换你现有的密码处理逻辑,用crypt3生成和PHP一致的哈希,或直接验证输入密码与数据库存储的哈希:

const crypt3 = require('crypt3');

// 生成与PHP crypt()完全一致的哈希(用于测试或生成新哈希)
function generatePHPCryptHash(password) {
    const salt = '$6$rounds=20000$xtreamcodes$';
    return crypt3(password, salt);
}

// 验证输入密码是否匹配数据库中的哈希
function verifyPassword(inputPassword, storedHash) {
    // 直接用存储的哈希作为盐,crypt3会自动解析盐里的算法、迭代次数等参数
    const generatedHash = crypt3(inputPassword, storedHash);
    return generatedHash === storedHash;
}

3. 修正登录接口逻辑

原代码存在异步函数未加await、验证逻辑错误的问题,修改后的登录接口:

// Endpoint para login
app.post('/login', async (req, res) => {
    const { username, password } = req.body;

    try {
        const user = await RegUser.findOne({ where: { username } });
        if (!user) {
            return res.status(400).json({ error: 'Usuário ou senha incorretos' });
        }

        // 验证密码
        const isPasswordValid = verifyPassword(password, user.password);

        if (!isPasswordValid) {
            return res.status(400).json({ error: 'Usuário ou senha incorretos' });
        }

        const token = jwt.sign({ id: user.id, username: user.username }, secretKey, { expiresIn: '1h' });
        res.json({ message: 'Login bem-sucedido', token, success: true });
    } catch (error) {
        console.error('Erro ao realizar login:', error);
        res.status(500).json({ error: 'Erro no servidor' });
    }
});

测试验证

当输入密码为admin时,调用generatePHPCryptHash('admin')会生成和你提供的完全一致的哈希:

$6$rounds=20000$xtreamcodes$XThC5OwfuS0YwS4ahiifzF14vkGbGsFF1w7ETL4sRRC5sOrAWCjWvQJDromZUQoQuwbAXAFdX3h3Cp3vqulpS0

内容的提问来源于stack exchange,提问作者Sabá12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 21:52:46