Recently I have been trying to make a program, and Im stuck. I am trying to create a login function where by the first time a user logs in, their username and password are encrypt and placed in a file. Then each time that user logs in, the username and password they enter is encrypted and compared to the value stored from the first time.
this means that I need a function that always created the same encrypted data if the input + salt are the same. But I cannot find a function that does this, as either it creates a hash that is different each time, or it only works with a random number that has to remain hidden (which kind of takes the point away as I would have to encrypt that value aswell!)
Does anyone know how to create a function that will create a hash that is always the same when the correct input is given, and a external variable is added (like a salt or a mac).
I have tried using:
PKCS5_PBKDF2_HMAC<SHA256> pbkdf; pbkdf.DeriveKey(derivedkey, derivedkey.size(), 0x00, (byte *) password.data(), password.size(), pwsalt, pwsalt.size(), iterations ); cout << "Generated key: " << derivedkey << endl; //encrypt CBC_Mode<AES>::Encryption aesencryption(derivedkey,derivedkey.size(),iv); StringSource encryptor(Userpass,true, new StreamTransformationFilter(aesencryption, new HexEncoder( new StringSink(cipherText) ) ) );
This function means that I only need to store the IV, the SALT and the output cipherText. But unfortunately each time the function is run, is creates a unique cipherText value.
I have also tried using:
HMAC< SHA256 > hmac(randomnum, randomnum.size()); const int flags = HashVerificationFilter::THROW_EXCEPTION | HashVerificationFilter::HASH_AT_END;
With a MAC, but I'm not sure if you can safely store the MAC in a plaintext file, and it only works using a random number that needs to be stored. This random number would need to be encrypted if stored in a plaintext file, which takes the point away in using it really.
So basically, is there a one-way hashing function that always creates the same output, using the same input and another variable (such as IV, salt, etc.)
I am using Visual c++ 2010 with the crypto++ library.