[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