[Metalab] [intern] Secure password hashing in c++ using cryptopp

Amir amir at viel-zu.org
Wed Sep 12 13:37:50 CEST 2018


Vielen Dank für das feeback on- und offlist.

Hier die überarbeitete version:

std::pair<string,string> hash_password(const string password)
{
    using namespace CryptoPP;
    unsigned int iterations = 1000000;

    AutoSeededRandomPool rng;

    SecByteBlock pwsalt(AES::DEFAULT_KEYLENGTH);
    rng.GenerateBlock(pwsalt,pwsalt.size());

    SecByteBlock derivedkey(AES::DEFAULT_KEYLENGTH);

    PKCS5_PBKDF2_HMAC<SHA256>(
       derivedkey, derivedkey.size(),
       0x00,
       (byte *) password.data(), password.size(),
       pwsalt, pwsalt.size(),
       iterations
    );
    std::string salthex;
    StringSource ss1(pwsalt,pwsalt.size(),true,
           new HexEncoder(
              new StringSink(salthex)
           )
         );
    std::string derivedhex;
    StringSource ss2(derivedkey,derivedkey.size(),true,
           new HexEncoder(
              new StringSink(derivedhex)
           )
         );
    return {derivedhex, salthex};
}


On 09/12/2018 01:31 PM, reox wrote:
> Soweit ich weiß sollte man für Passwörter hash Funktionen verwenden, 
> welche für Passwörter gemacht wurden und nicht die "üblichen 
> verdächtigen" wie SHA.
> Hier gibts dazu ne ganze Menge infos: 
> https://crackstation.net/hashing-security.htm
> 
> LG Sebastian
> 
> Am 12. September 2018 13:09:39 MESZ schrieb Amir <amir at viel-zu.org>:
> 
>     ich hab mir eine passwort hashing funktion gezimmert und hab aber
>     zweifel ob sie sicher ist. was denkt ihr?
> 
>     #include <cryptopp/hex.h>
>     #include <cryptopp/sha.h>
>     #include <cryptopp/base64.h>
>     #include <random>
> 
>     using std::string;
> 
>     std::<string,string> hash_password(const string password)
>     {
>         std::mt19937 rng;
>         rng.seed(std::random_device()());
>         std::uniform_real_distribution<std::mt19937::result_type> dist(0,1);
> 
>         string salt = std::to_string(dist(rng));
>         CryptoPP::SHA256 hash;
>         byte digest[CryptoPP::SHA256::DIGESTSIZE];
>         std::string output;
> 
>         hash.CalculateDigest(digest,(const byte *)salt.c_str(),salt.size());
> 
>         CryptoPP::HexEncoder encoder;
>         CryptoPP::StringSink *SS = new CryptoPP::StringSink(output);
>         encoder.Attach(SS);
>         encoder.Put(digest,sizeof(digest));
>         encoder.MessageEnd();
> 
>         return {output, salt};
>     }
>     ------------------------------------------------------------------------
>     intern mailing list
>     intern at lists.metalab.at
>     https://metalab.at/wiki/Intern_Abonnement_Verwalten
>     https://lists.metalab.at/mailman/listinfo/intern
> 
> 
> 
> _______________________________________________
> Metalab mailing list
> Metalab at lists.metalab.at
> https://lists.metalab.at/mailman/listinfo/metalab
> 





More information about the Metalab mailing list