如何在 Meteor 中解密密码

How to decrypt password in Meteor

可以解密由 Meteor 应用程序生成的此类密码。

我的想法是在 C# 中为我的应用程序使用相同的凭据(电子邮件和密码)

那是 bcrypt 哈希吗?它取决于密钥的大小,因为 Blowfish 是可变大小的密钥。如果是32位。当然,你可以用一些强大的计算能力和几个小时来完成。它是一个 128 位密钥,在它每次完成暴力破解之前,你早就死了(我们所知道的宇宙也是如此)。不过,Blowfish 确实存在针对弱密钥的小漏洞。我会重新考虑你的实施。

散列和加密密码的真正目的是使解密变得不切实际。

但是,您可以重复使用 meteor 应用程序中的 bcrypt(hash(password)) 并在另一个应用程序中对其进行检查,前提是您使用相同的方案。

如其他答案所述,您无法解密密码,但您可以很好地使用 Meteor 数据库在不同的系统中进行身份验证。

这是怎么做的:

在您的其他系统中,首先找到提供 SHA256bcrypt 实现的库。

然后获取用户输入的密码,并首先从中计算出 SHA256 摘要哈希。

然后使用轮数 = 10(这是 Meteor 默认值)将此哈希字符串提供给 bcrypt。

现在将 bcrypt 的结果与 Meteor MongoDB 数据库的 services.password.bcrypt 进行比较。如果它们匹配,则用户提供了正确的密码。

作为参考,Meteor 实现 is here。很简单,评论也很好。

我遇到了一个类似的用例,我正在编写一个 C# 应用程序来验证通过 Meteor.js 应用程序创建的用户。我开始工作的代码是这样的(使用 System.Security.Cryptography 和 BCrypt.Net-Next):

string sha256_hash(string value) {
    StringBuilder stringBuilder = new StringBuilder();

    using (SHA256 hash = SHA256.Create()) {
        Encoding enc = Encoding.UTF8;
        Byte[] resultingHash = hash.ComputeHash(enc.GetBytes(value));

        foreach (Byte b in resultingHash) {
            stringBuilder.Append(b.ToString("x2"));
        }
    }

    return stringBuilder.ToString();
}

// First compute SHA256 hash
string sha256hash = sha256_hash("my_password");

// Let BCrypt.Net rehash and check if it matches Meteor's hash
if (BCrypt.Net.BCrypt.Verify(sha256hash, dbPassword) == true) {
    Console.WriteLine("Valid!");
}