答案 0 :(得分:3)
如其他答案中所述,您无法解密密码,但您可以很好地使用Meteor数据库在其他系统中进行身份验证。
这是怎么做的:
在您的其他系统中,首先找到提供SHA256
和bcrypt
实现的库。
然后获取用户输入的密码,首先从中计算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!");
}