c#中的哈希函数没有给出预期的哈希密码

时间:2014-04-18 08:52:39

标签: c# hash cryptography md5 moodle

我知道这个问题已被多次询问,但实际上到现在为止我找不到合适的问题所以请帮助。 我想通过用c#编写的脚本在moodle的数据库中插入新用户。我想要做的是从该脚本向该用户插入用户名和密码。所以我需要插入哈希密码。我所有的哈希密码都以“$ 2y $ 10 $”开头。在c#中,我尝试了几种方法,并没有给我相同的密码。对于前者我试过了:

string cryptedPassword = Crypter.Blowfish.Crypt(password);

它给了我

  

$ 2A和; 06&安培; bQuFKC8fVPYQsGbQj3sL7uoZByn7tRc4enxBeiN2k1wu5iyubTIyi

虽然预期的是

  

$ 2Y $ 10 $ SNUjOqCuwKodg0E126mHUO2NzMBnIHZl / FD / Q2wEv4hg.y5y2j4VC

。 以下是真实的,所以crypter可以像moodle脚本一样使用哈希密码来填充我的密码:

bool matches = Crypter.CheckPassword(password, "$2y$10$SNUjOqCuwKodg0E126mHUO2NzMBnIHZl/fD/Q2wEv4hg.y5y2j4VC");

如何在'Crypter.Blowfish'中指定hash-algorithm = 2y = BCrypt和cost-factor = 10 = 2 ^ 10次迭代,以获得与预期相同的哈希密码? 任何帮助表示赞赏。 提前致谢

2 个答案:

答案 0 :(得分:2)

函数Crypter.Blowfish.Crypt设置第二个参数Salt,尝试设置它,因为当你没有为每次运行设置Salt参数模块时使用随机盐 试试这个

string cryptedPassword = Crypter.Blowfish.Crypt(password,"some_SALT");

答案 1 :(得分:0)

只是为了回答而不是作为评论(更具可读性):

as @ y.h评论说:

string result = Crypter.Blowfish.Crypt(cadena, 
                new CrypterOptions()
                {
                    { CrypterOption.Variant, BlowfishCrypterVariant.Corrected }, 
                    { CrypterOption.Rounds, 6 }
                });

这会产生类似的东西:

$ $ 2Y 06 $ xkdTy5YwKmMCDP6vQGC5A.YgZkKxv17xQQfMyIUNfNWazd4pqqibK

哪个是有效的2y版本(加上圆形因子6)

干杯!