mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2025-12-24 03:57:21 -08:00
--------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de> Co-authored-by: ebbit1q <ebbit1q@gmail.com>
39 lines
1.1 KiB
C++
39 lines
1.1 KiB
C++
#include "passwordhasher.h"
|
|
|
|
#include <QCryptographicHash>
|
|
#include <libcockatrice/rng/rng_sfmt.h>
|
|
|
|
QString PasswordHasher::computeHash(const QString &password, const QString &salt)
|
|
{
|
|
QCryptographicHash::Algorithm algo = QCryptographicHash::Sha512;
|
|
const int rounds = 1000;
|
|
|
|
QByteArray hash = (salt + password).toUtf8();
|
|
for (int i = 0; i < rounds; ++i) {
|
|
hash = QCryptographicHash::hash(hash, algo);
|
|
}
|
|
QString hashedPass = salt + QString(hash.toBase64());
|
|
return hashedPass;
|
|
}
|
|
|
|
QString PasswordHasher::generateRandomSalt(const int len)
|
|
{
|
|
static const char alphanum[] = "0123456789"
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
"abcdefghijklmnopqrstuvwxyz";
|
|
|
|
QString ret;
|
|
int size = sizeof(alphanum) - 1;
|
|
|
|
for (int i = 0; i < len; ++i) {
|
|
ret.append(alphanum[rng->rand(0, size)]);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
QString PasswordHasher::generateActivationToken()
|
|
{
|
|
return QCryptographicHash::hash(generateRandomSalt().toUtf8(), QCryptographicHash::Md5).toBase64().left(16);
|
|
}
|