Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- use App\User;
- use Defuse\Crypto\Crypto;
- use Defuse\Crypto\Key;
- use Defuse\Crypto\KeyProtectedByPassword;
- use ParagonIE\EasyRSA\EasyRSA;
- use ParagonIE\EasyRSA\KeyPair;
- class SomeClass
- {
- public function register($username, $email, $password)
- {
- $password_hash = password_hash($password, PASSWORD_DEFAULT);
- $user = User::create(['username' => $username, 'password' => $password_hash, 'email' => $email]);
- //Random and secure master key used for encryption / decryption of data.
- $master_key = Key::createNewRandomKey();
- $master_key_ascii = $master_key->saveToAsciiSafeString(); //Save to encrypt.
- //Password protected key.
- $keyProtectedbyPassword = KeyProtectedByPassword::createRandomPasswordProtectedKey($password);
- $user->locked_key = $keyProtectedbyPassword->saveToAsciiSafeString();
- //Unlock to use for encryption.
- $unlocked_key = $keyProtectedbyPassword->unlockKey($password);
- $user->encrypted_master_key = Crypto::encrypt($master_key_ascii, $unlocked_key);
- //keypair
- $keyPair = KeyPair::generateKeyPair(2048);
- $privateKey = $keyPair->getPrivateKey();
- $publicKey = $keyPair->getPublicKey();
- $user->public_key = $publicKey;
- $user->encrypted_private_key = Crypto::encrypt($privateKey, $master_key);
- }
- public function addPassword($password)
- {
- //get the current logged in user object/model
- $user = $this->getCurrentUser();
- $locked_key = KeyProtectedByPassword::loadFromAsciiSafeString($user->locked_key);
- $unlocked_key = $locked_key->unlockKey($user->plaintextPassword); //Important! Don't use the hashed password. Use the Password Input (Maybe from login?)
- $decrypted_master_key = Crypto::decrypt($user->encrypted_master_key, $unlocked_key);
- $master_key = Key::loadFromAsciiSafeString($decrypted_master_key);
- $user_private_key = Crypto::decrypt($user->encrypted_private_key, $master_key);
- $encrypted_password_to_add = Crypto::encrypt($password, $master_key);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement