SlideShare una empresa de Scribd logo
1 de 85
Descargar para leer sin conexión
Password Hashing:
The Right Way
Jeremy Kendall - Memphis PHP
January 28, 2014

Wednesday, January 29, 14
Wednesday, January 29, 14
I love to code

Wednesday, January 29, 14
I love to code
I’m terribly forgetful

Wednesday, January 29, 14
I love to code
I’m terribly forgetful
I take pictures

Wednesday, January 29, 14
I love to code
I’m terribly forgetful
I take pictures
I work at OpenSky

Wednesday, January 29, 14
I’m a Little Off My Game

Wednesday, January 29, 14
What Qualifies Me To Talk
About Security?

Wednesday, January 29, 14
Not Much

Wednesday, January 29, 14
Not Much
But that will work in our favor ...

Wednesday, January 29, 14
Cryptography is Hard

Wednesday, January 29, 14
Cryptography is Hard
Pro Tip: Leave it to the experts

Wednesday, January 29, 14
The Wrong Way
<?php
class SecurityFail
{
// Encrypt Passwords for Highest Level of Security.
static public function encrypt($pword)
{
return md5($pword);
}
}

http://csiphp.com/blog/2012/02/16/encrypt-passwords-for-highest-level-of-security/

Wednesday, January 29, 14
The Right Way

http://php.net/manual/en/ref.password.php
Wednesday, January 29, 14
The Awesomer Way

Wednesday, January 29, 14
Password Hashing Functions

Wednesday, January 29, 14
Password Hashing Functions
Pro Tip: Use password_compat for PHP 5.3.7+

Wednesday, January 29, 14
Password Hashing Functions
Pro Tip: Use password_compat for PHP 5.3.7+
Pro Tip: Use phpass for PHP <= 5.3.6

Wednesday, January 29, 14
password_hash

http://www.php.net/manual/en/function.password-hash.php

Wednesday, January 29, 14
password_hash
‣

Creates a new password hash

http://www.php.net/manual/en/function.password-hash.php

Wednesday, January 29, 14
password_hash
‣
Strong, one-way hashing algorithm
‣
Creates a new password hash

http://www.php.net/manual/en/function.password-hash.php

Wednesday, January 29, 14
password_hash
‣
Strong, one-way hashing algorithm
‣
Creates a new password hash

‣

PASSWORD_DEFAULT or PASSWORD_BCRYPT

http://www.php.net/manual/en/function.password-hash.php

Wednesday, January 29, 14
password_hash
‣
Strong, one-way hashing algorithm
‣
Creates a new password hash

‣

‣

PASSWORD_DEFAULT or PASSWORD_BCRYPT

Optional cost and salt

http://www.php.net/manual/en/function.password-hash.php

Wednesday, January 29, 14
password_hash

http://www.php.net/manual/en/function.password-hash.php

Wednesday, January 29, 14
password_hash
‣

Always use PASSWORD_DEFAULT

http://www.php.net/manual/en/function.password-hash.php

Wednesday, January 29, 14
password_hash
‣
Your DB’s password field should be varchar(255)
‣
Always use PASSWORD_DEFAULT

http://www.php.net/manual/en/function.password-hash.php

Wednesday, January 29, 14
password_hash
‣
Your DB’s password field should be varchar(255)
‣
Do not use your own salt
‣
Always use PASSWORD_DEFAULT

http://www.php.net/manual/en/function.password-hash.php

Wednesday, January 29, 14
password_hash
‣
Your DB’s password field should be varchar(255)
‣
Do not use your own salt
‣
Check for an appropriate cost using the example script
‣ in the manual
Always use PASSWORD_DEFAULT

http://www.php.net/manual/en/function.password-hash.php

Wednesday, January 29, 14
password_hash
$hash = password_hash('secret pass', PASSWORD_DEFAULT);
// or
$options = array('cost' => 12);
$hash = password_hash('secret pass', PASSWORD_DEFAULT, $options);

Wednesday, January 29, 14
password_verify

Wednesday, January 29, 14
password_verify
‣

Wednesday, January 29, 14

Verifies that a password matches a hash
password_verify
‣
Uh, yeah, that’s about it
‣

Verifies that a password matches a hash

Wednesday, January 29, 14
password_verify
$valid = password_verify($_POST['pass'], $hashFromDb);

Wednesday, January 29, 14
password_needs_rehash

Wednesday, January 29, 14
password_needs_rehash
‣

Wednesday, January 29, 14

Checks password to see if it needs to be updated
password_needs_rehash
‣
Uses both hash and cost to check current hash
‣

Checks password to see if it needs to be updated

Wednesday, January 29, 14
password_needs_rehash
$needsRehash = password_needs_rehash($hashFromDb, PASSWORD_DEFAULT);
// or
$options = array('cost' => 12);
$needsRehash = password_needs_rehash($hashFromDb, PASSWORD_DEFAULT, $options);

Wednesday, January 29, 14
That’s Awesome and Secure

Wednesday, January 29, 14
But Could It Be Awesomer,
Securer, and Easier?

Wednesday, January 29, 14
Password Validator

Wednesday, January 29, 14
Password Validator
‣

Wednesday, January 29, 14

Validates passwords against password_hash
Password Validator
‣
Will rehash when needed
‣

Validates passwords against password_hash

Wednesday, January 29, 14
Password Validator
‣
Will rehash when needed
‣
Will upgrade legacy passwords
‣

Validates passwords against password_hash

Wednesday, January 29, 14
Password Validator
‣
Will rehash when needed
‣
Will upgrade legacy passwords
‣
Requires PHP 5.3.7+
‣

Validates passwords against password_hash

Wednesday, January 29, 14
Password Validator
‣
Will rehash when needed
‣
Will upgrade legacy passwords
‣
Requires PHP 5.3.7+
‣
(No version for <=5.3.6 is in the works)
‣

Validates passwords against password_hash

Wednesday, January 29, 14
Password Validator
use JeremyKendallPasswordPasswordValidator;
use JeremyKendallPasswordResult as ValidationResult;
$passwordHash = password_hash('password', PASSWORD_DEFAULT);
$validator = new PasswordValidator();
$result = $validator->isValid('password', $passwordHash);
$valid = $result->isValid();
$code = $result->getCode();
// $valid = true
// $code = ValidationResult::SUCCESS

Wednesday, January 29, 14
Password Validator
use JeremyKendallPasswordPasswordValidator;

use JeremyKendallPasswordResult as ValidationResult;
$options = array('cost' => 9);
$passwordHash = password_hash('password', PASSWORD_DEFAULT, $options);
$validator = new PasswordValidator();
$validator->setOptions($options);
$result = $validator->isValid('password', $passwordHash);

$valid = $result->isValid();
$code = $result->getCode();
// $valid = true
// $code = ValidationResult::SUCCESS

Wednesday, January 29, 14
Password Validator
use JeremyKendallPasswordPasswordValidator;

use JeremyKendallPasswordResult as ValidationResult;
$options = array('cost' => 9);
$passwordHash = password_hash('password', PASSWORD_DEFAULT, $options);
$validator = new PasswordValidator();
// Remember, default cost is 10, so a cost 9 hash gets rehashed
$result = $validator->isValid('password', $passwordHash);

$valid = $result->isValid();
$code = $result->getCode();
$hash = $result->getPassword();
// $valid = true
// $code = ValidationResult::SUCCESS_PASSWORD_REHASHED
// $hash = the new, rehashed password. Save it!

Wednesday, January 29, 14
Fine, But We’re Not Using
password_hash Yet ...

Wednesday, January 29, 14
Decorator Pattern

http://en.wikipedia.org/wiki/Decorator_pattern

Wednesday, January 29, 14
Decorator Pattern
‣

Wrap an object

http://en.wikipedia.org/wiki/Decorator_pattern

Wednesday, January 29, 14
Decorator Pattern
‣
Change its behavior
‣
Wrap an object

http://en.wikipedia.org/wiki/Decorator_pattern

Wednesday, January 29, 14
Decorator Pattern
‣
Change its behavior
‣
Dynamically attach additional responsibilities
‣
Wrap an object

http://en.wikipedia.org/wiki/Decorator_pattern

Wednesday, January 29, 14
PasswordValidatorInterface
interface PasswordValidatorInterface
{
public function isValid($password, $passwordHash, $identity = null);
public function rehash($password);
public function setOptions(array $options);
public function getOptions();
}

Wednesday, January 29, 14
Upgrade Decorator

Wednesday, January 29, 14
Upgrade Decorator
‣

Wednesday, January 29, 14

Used when you’re not already using password_hash ...
Upgrade Decorator
‣
... but you’re ready to do things the right way
‣

Used when you’re not already using password_hash ...

Wednesday, January 29, 14
Upgrade Decorator
‣
... but you’re ready to do things the right way
‣
Accepts an instance of PasswordValidatorInterface ...
‣

Used when you’re not already using password_hash ...

Wednesday, January 29, 14
Upgrade Decorator
‣
... but you’re ready to do things the right way
‣
Accepts an instance of PasswordValidatorInterface ...
‣
... and a validation callback
‣

Used when you’re not already using password_hash ...

Wednesday, January 29, 14
Upgrade Decorator
// Somewhere in your authentication script
if (hash('sha512', $password) === $passwordHash) {
$valid = true;
}
$valid = false;

Wednesday, January 29, 14
Upgrade Decorator
// Same authentication check expressed as a callback
$validationCallback = function ($password, $passwordHash) {
if (hash('sha512', $password) === $passwordHash) {
return true;
}
return false;
};

Wednesday, January 29, 14
Upgrade Decorator
$validator = new UpgradeDecorator(
new PasswordValidator(),
$validationCallback
);
$passwordHash = hash('sha512', 'password');
$result = $validator->isValid('password', $passwordHash);
$valid = $result->isValid();
$code = $result->getCode();
$hash = $result->getPassword();
// $valid = true
// $code = ValidationResult::SUCCESS_PASSWORD_REHASHED
// $hash = the new, rehashed password. Save it!

Wednesday, January 29, 14
Fine, But Now I Have to Test
for SUCCESS_PASSWORD_REHASHED
Every Time

Wednesday, January 29, 14
Storage Decorator

Wednesday, January 29, 14
Storage Decorator
‣

Wednesday, January 29, 14

Automatically stores all rehashed passwords
Storage Decorator
‣
Accepts two constructor args:
‣

Automatically stores all rehashed passwords

Wednesday, January 29, 14
Storage Decorator
‣
Accepts two constructor args:
‣
Instance of PasswordValidatorInterface
‣

Automatically stores all rehashed passwords

Wednesday, January 29, 14
Storage Decorator
‣
Accepts two constructor args:
‣
Instance of PasswordValidatorInterface
‣
Instance of StorageInterface
‣

Automatically stores all rehashed passwords

Wednesday, January 29, 14
StorageInterface
interface StorageInterface
{
/**
* Updates user's password in persistent storage
*
* @param string $identity Unique user identifier
* @param string $password New password hash
*/
public function updatePassword($identity, $password);
}

Wednesday, January 29, 14
UserDao
use JeremyKendallPasswordStorageStorageInterface;
class UserDao implements StorageInterface
{
protected $db;
public function __construct(PDO $db)
{
$this->db = $db;
}
public function updatePassword($identity, $newPasswordHash)
{
$sql = 'UPDATE users SET passwordHash = :passwordHash WHERE identity = :identity';
$stmt = $this->db->prepare($sql);
$stmt->execute(array('passwordHash' => $newPasswordHash, 'identity' => $identity));
return $this->find($identity);
}
}

Wednesday, January 29, 14
Storage Decorator
use JeremyKendallPasswordDecoratorStorageDecorator;
$validator = new StorageDecorator($upgradeDecorator, $userDao);
// Uses the optional third argument for PasswordValidatorInterface::isValid()
$result = $validator->isValid('password', $passwordHash, 'arthur@arthurdent.com');
// Result is the same as any other validation attempt except ...
// ... ValidationResult::SUCCESS_PASSWORD_REHASHED hashes are automatically persisted!

Wednesday, January 29, 14
Recap

Wednesday, January 29, 14
Recap
‣

Wednesday, January 29, 14

Use the new PHP password hashing functions
Recap
‣
Use Password Validator to make it dead simple
‣
Use the new PHP password hashing functions

Wednesday, January 29, 14
Recap
‣
Use Password Validator to make it dead simple
‣
If you’re not at PHP 5.5, use password_compat
‣
Use the new PHP password hashing functions

Wednesday, January 29, 14
Recap
‣
Use Password Validator to make it dead simple
‣
If you’re not at PHP 5.5, use password_compat
‣
If you’re not at PHP 5.3.7+, UPGRADE
‣
Use the new PHP password hashing functions

Wednesday, January 29, 14
Recap
‣
Use Password Validator to make it dead simple
‣
If you’re not at PHP 5.5, use password_compat
‣
If you’re not at PHP 5.3.7+, UPGRADE
‣
If you can’t upgrade, use OpenWall’s phpass
‣
Use the new PHP password hashing functions

Wednesday, January 29, 14
Recap
‣
Use Password Validator to make it dead simple
‣
If you’re not at PHP 5.5, use password_compat
‣
If you’re not at PHP 5.3.7+, UPGRADE
‣
If you can’t upgrade, use OpenWall’s phpass
‣
DO NOT ROLL YOUR OWN
‣
Use the new PHP password hashing functions

Wednesday, January 29, 14
Resources

Wednesday, January 29, 14
Resources
‣

Wednesday, January 29, 14

PHP Password Hashing Functions: http://php.net/password
Resources
‣
Original password_hash RFC:
‣

PHP Password Hashing Functions: http://php.net/password

Wednesday, January 29, 14

https://wiki.php.net/rfc/password_hash
Resources
‣
Original password_hash RFC:
‣
Password Validator:
‣

PHP Password Hashing Functions: http://php.net/password
https://wiki.php.net/rfc/password_hash

https://github.com/jeremykendall/password-validator

Wednesday, January 29, 14
Resources
‣
Original password_hash RFC:
‣
Password Validator:
‣
password_compat:
‣

PHP Password Hashing Functions: http://php.net/password
https://wiki.php.net/rfc/password_hash

https://github.com/jeremykendall/password-validator

https://github.com/ircmaxell/password_compat

Wednesday, January 29, 14
Resources
‣
Original password_hash RFC:
‣
Password Validator:
‣
password_compat:
‣
OpenWall phpass:
‣

PHP Password Hashing Functions: http://php.net/password
https://wiki.php.net/rfc/password_hash

https://github.com/jeremykendall/password-validator

https://github.com/ircmaxell/password_compat

http://www.openwall.com/phpass/

Wednesday, January 29, 14
Thanks!
jeremy@jeremykendall.net
http://about.me/jeremykendall
@jeremykendall
http://365.jeremykendall.net

Wednesday, January 29, 14

Más contenido relacionado

Más de Jeremy Kendall

Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPJeremy Kendall
 
Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPJeremy Kendall
 
5 Ways to Awesome-ize Your (PHP) Code
5 Ways to Awesome-ize Your (PHP) Code5 Ways to Awesome-ize Your (PHP) Code
5 Ways to Awesome-ize Your (PHP) CodeJeremy Kendall
 
Game Changing Dependency Management
Game Changing Dependency ManagementGame Changing Dependency Management
Game Changing Dependency ManagementJeremy Kendall
 
Php 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the GoodPhp 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the GoodJeremy Kendall
 
Keeping it small - Getting to know the Slim PHP micro framework
Keeping it small - Getting to know the Slim PHP micro frameworkKeeping it small - Getting to know the Slim PHP micro framework
Keeping it small - Getting to know the Slim PHP micro frameworkJeremy Kendall
 
Keeping it Small: Getting to know the Slim Micro Framework
Keeping it Small: Getting to know the Slim Micro FrameworkKeeping it Small: Getting to know the Slim Micro Framework
Keeping it Small: Getting to know the Slim Micro FrameworkJeremy Kendall
 
Keeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro frameworkKeeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro frameworkJeremy Kendall
 
PHP 102: Out with the Bad, In with the Good
PHP 102: Out with the Bad, In with the GoodPHP 102: Out with the Bad, In with the Good
PHP 102: Out with the Bad, In with the GoodJeremy Kendall
 
Intro to #memtech PHP 2011-12-05
Intro to #memtech PHP   2011-12-05Intro to #memtech PHP   2011-12-05
Intro to #memtech PHP 2011-12-05Jeremy Kendall
 
TDD in PHP - Memphis PHP 2011-08-25
TDD in PHP - Memphis PHP 2011-08-25TDD in PHP - Memphis PHP 2011-08-25
TDD in PHP - Memphis PHP 2011-08-25Jeremy Kendall
 
Zend_Form to the Rescue - A Brief Introduction to Zend_Form
Zend_Form to the Rescue - A Brief Introduction to Zend_FormZend_Form to the Rescue - A Brief Introduction to Zend_Form
Zend_Form to the Rescue - A Brief Introduction to Zend_FormJeremy Kendall
 
Zero to ZF in 10 Minutes
Zero to ZF in 10 MinutesZero to ZF in 10 Minutes
Zero to ZF in 10 MinutesJeremy Kendall
 
Tdd in php a brief example
Tdd in php   a brief exampleTdd in php   a brief example
Tdd in php a brief exampleJeremy Kendall
 
A Brief Introduction to Zend_Form
A Brief Introduction to Zend_FormA Brief Introduction to Zend_Form
A Brief Introduction to Zend_FormJeremy Kendall
 
Zero to Zend Framework in 10 minutes
Zero to Zend Framework in 10 minutesZero to Zend Framework in 10 minutes
Zero to Zend Framework in 10 minutesJeremy Kendall
 

Más de Jeremy Kendall (17)

Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHP
 
Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHP
 
5 Ways to Awesome-ize Your (PHP) Code
5 Ways to Awesome-ize Your (PHP) Code5 Ways to Awesome-ize Your (PHP) Code
5 Ways to Awesome-ize Your (PHP) Code
 
Game Changing Dependency Management
Game Changing Dependency ManagementGame Changing Dependency Management
Game Changing Dependency Management
 
Php 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the GoodPhp 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the Good
 
Keeping it small - Getting to know the Slim PHP micro framework
Keeping it small - Getting to know the Slim PHP micro frameworkKeeping it small - Getting to know the Slim PHP micro framework
Keeping it small - Getting to know the Slim PHP micro framework
 
Keeping it Small: Getting to know the Slim Micro Framework
Keeping it Small: Getting to know the Slim Micro FrameworkKeeping it Small: Getting to know the Slim Micro Framework
Keeping it Small: Getting to know the Slim Micro Framework
 
Keeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro frameworkKeeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro framework
 
Php 101: PDO
Php 101: PDOPhp 101: PDO
Php 101: PDO
 
PHP 102: Out with the Bad, In with the Good
PHP 102: Out with the Bad, In with the GoodPHP 102: Out with the Bad, In with the Good
PHP 102: Out with the Bad, In with the Good
 
Intro to #memtech PHP 2011-12-05
Intro to #memtech PHP   2011-12-05Intro to #memtech PHP   2011-12-05
Intro to #memtech PHP 2011-12-05
 
TDD in PHP - Memphis PHP 2011-08-25
TDD in PHP - Memphis PHP 2011-08-25TDD in PHP - Memphis PHP 2011-08-25
TDD in PHP - Memphis PHP 2011-08-25
 
Zend_Form to the Rescue - A Brief Introduction to Zend_Form
Zend_Form to the Rescue - A Brief Introduction to Zend_FormZend_Form to the Rescue - A Brief Introduction to Zend_Form
Zend_Form to the Rescue - A Brief Introduction to Zend_Form
 
Zero to ZF in 10 Minutes
Zero to ZF in 10 MinutesZero to ZF in 10 Minutes
Zero to ZF in 10 Minutes
 
Tdd in php a brief example
Tdd in php   a brief exampleTdd in php   a brief example
Tdd in php a brief example
 
A Brief Introduction to Zend_Form
A Brief Introduction to Zend_FormA Brief Introduction to Zend_Form
A Brief Introduction to Zend_Form
 
Zero to Zend Framework in 10 minutes
Zero to Zend Framework in 10 minutesZero to Zend Framework in 10 minutes
Zero to Zend Framework in 10 minutes
 

Último

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 

Último (20)

08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 

Password Hashing: The Right Way