如何在Meteor中解密密码

时间:2016-12-20 15:44:38

标签: c# mongodb meteor meteor-accounts

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

enter image description here

我的想法是在C#

中为我的应用程序使用相同的凭据(电子邮件和密码)

enter image description here

4 个答案:

答案 0 :(得分:3)

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

这是怎么做的:

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

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

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

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

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

答案 1 :(得分:2)

散列和加密密码的目的是使解密不真实。

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

答案 2 :(得分:1)

这是一个bcrypt哈希吗?它取决于键的大小,如Blowfish作为可变大小的键。如果它是32位。当然,你可以用一些严肃的计算能力和几个小时来做​​到这一点。它是一个128位的密钥,在它完成暴力破解之前,你将长期死亡(我们所知道的宇宙也将如此)。但是,Blowfish确实存在弱密钥的轻微漏洞。我会重新考虑你的实施。

答案 3 :(得分:0)

我遇到了一个类似的用例,我正在编写一个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!");
}