Pergunta

Alguém sabe de uma boa implementação de bcrypt, eu sei que esta pergunta foi feita antes, mas ele ficou muito pouca resposta. Eu sou um incerto de apenas escolher uma implementação que aparece no google e am pensar que eu possa ser melhor fora de usar sha256 no namespace System.Security.Cryptography, pelo menos, então eu sei que é suportado pouco! Quais são seus pensamentos?

Foi útil?

Solução

Parece que você está procurando BCrypt.net :

BCrypt.net é uma implementação do password baseada em Blowfish do OpenBSD código de hashing, descrito em "A Future-Adaptável senha Scheme" por Niels Provos e David Mazières. Isto é uma porta directa de jBCrypt por Damien Miller, e é, portanto, liberado sob a mesma licença BSD. O código é totalmente gerenciado e deve funcionar com qualquer execução de CLI little-endian - lo foi testado com Microsoft .NET e Mono.

Outras dicas

Você pode encontrar uma implementação atualizada do bcrypt para .Net aqui: http://bcrypt.codeplex.com/

BCrypt.Net parece ser uma biblioteca mais popular neste momento

http://bcrypt.codeplex.com/

Aqui está um exemplo de como usá-lo para a senha hashing:

[TestMethod]
    public void BCryptTest()
    {
        const string password = "PASSWORD";
        const int workFactor = 13;

        var start = DateTime.UtcNow;
        var hashed = BCrypt.Net.BCrypt.HashPassword(password, workFactor);
        var end = DateTime.UtcNow;

        Console.WriteLine("hash length is {0} chars", hashed.Length);
        Console.WriteLine("Processing time is {0} with workFactor {1}", end - start, workFactor);
        Console.WriteLine("Hashed password: {0} ", hashed);
        Console.WriteLine("correct password {0}", BCrypt.Net.BCrypt.Verify("PASSWORD", hashed));
        Console.WriteLine("incorrect password {0}", BCrypt.Net.BCrypt.Verify("PASSWORd", hashed));
    }

Exemplo de saída:

hash length is 60 chars
Processing time is 00:00:01.0020000 with workFactor 13
Hashed password: $2a$13$iBqdG7ENBABEargiyzGlTexPsmviF/qrFxUZB2zce7HKF6MoBNhEq 
correct password True
incorrect password False

Eu precisava de uma implementação bcrypt ao mover algo do PostgreSQL (que tem pg_crypto) para SQLite (que não), então eu escrevi o meu próprio. Vendo desta mensagem eu não sou o único a necessidade isso, eu decidi dar um tapa de uma licença sobre ele e liberá-lo. O URL é:

http://zer7.com/software.php?page=cryptsharp

A implementação Blowfish por trás dele é uma porta de implementação C do dominio público de Bruce Schneier, e sucede em todos os vetores de teste oficiais.

O código bcrypt eu mesmo escrevi baseado no spec. Eu também criou um script PHP que gera senhas aleatórias de comprimento 0 a 100 e sais, criptas eles, e saídas-los para um arquivo de teste. O código C # combina estes 100% do tempo até agora. Você está convidado a usar o script e testar isso sozinho.

A biblioteca também inclui o código PBKDF2 que funciona para qualquer HMAC em oposição a implementação SHA-1-only da Net (adicionado hoje - eu estou pretendendo fazer Scrypt em C # breve e que requer PBKDF2 com HMAC-SHA256). Você poderia tornar-se um esquema baseado neste também, se você queria.

Resposta errada, por favor, veja abaixo

algoritmos

All "Cng" (Cryptography Next Generation) pós-fixados no .Net Framework agora usar bcrypt. Por exemplo. SHA256Cng .


Na verdade, o MS bcrypt (BestCrypt) não se refere a um baseado na cifra Blowfish - obrigado, RobbyD, pelo comentário
. não vai apagar a resposta, apenas no caso de qualquer outra pessoa faz a mesma confusão.

Você já tentou isso MS função BCryptCreateHash C ++ talvez ?? Parece estar presente a partir do Windows Server 2008 e Windows Vista.

Além disso, você provavelmente pode verificar o seguinte MS C # BCryptNative cs classe também talvez.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top