do
$$
declare hashed text;
begin
    // hashed is what is stored in database
    hashed := crypt('passwordToTest', gen_salt('bf'));
    // then check user login password against the saved hash
    if hashed = crypt('passwordToTest', hashed) then
        raise notice 'matches';
    else
        raise notice 'didn''t match';
    end if;
end;
$$ language 'plpgsql';
..before this BCrypt example for .NET from codeproject:
string myPassword = "passwordToTest"; string mySalt = BCrypt.GenerateSalt(); //mySalt == "$2a$10$rBV2JDeWW3.vKyeQcM8fFO" string myHash = BCrypt.HashPassword(myPassword, mySalt); //myHash == "$2a$10$rBV2JDeWW3.vKyeQcM8fFO4777l4bVeQgDL6VIkxqlzQ7TCalQvla" bool doesPasswordMatch = BCrypt.CheckPassword(myPassword, myHash);
Otherwise, I'll think CheckPassword is a magical functionality of bcrypt. On the latest version of BCrypt.NET from Nuget, the CheckPassword functionality is missing. Seeing how bcrypt hashing and checking works (via PostgreSQL example), CheckPassword is just a simple code:
[TestClass]
public class TheUnitTest
{
    [TestMethod]
    public void Test_if_password_matched()
    {
        // Arrange
        // hashed is what is stored in database
        string hashed = BCrypt.Net.BCrypt.HashPassword("passwordToTest", BCrypt.Net.BCrypt.GenerateSalt(12));
        // Act
        // then check user login password against the saved hash
        bool matches = hashed == BCrypt.Net.BCrypt.HashPassword("passwordToTest", hashed);
        // Assert
        Assert.IsTrue(matches);
    }
}
Happy Coding!
 
No comments:
Post a Comment