Table of Contents
Several ways for PHP to handle passwords
Home Backend Development PHP Tutorial Several Ways to Handle Passwords in PHP_PHP Tutorial

Several Ways to Handle Passwords in PHP_PHP Tutorial

Jul 13, 2016 am 09:45 AM
php web use several kinds exist deal with password develop Way use of

Several ways for PHP to handle passwords

When using PHP to develop web applications, many applications will require users to register, and when registering, we need the user’s information After processing, the most common ones are email addresses and passwords. This article is intended to discuss the processing of passwords: that is, the encryption of passwords.

MD5

I believe that when many PHP developers first came into contact with PHP, the preferred encryption function for handling passwords might be MD5. This is what I thought at the time:

$password = md5($_POST["password"]);

Is the above code very familiar? However, the MD5 encryption method seems to be not very popular in the PHP world at present, because its encryption algorithm is really a bit simple, and many password cracking sites have There are a lot of password strings encrypted by MD5, so here I strongly discourage using MD5 alone to encrypt user passwords.

SHA256 and SHA512

In fact, there is a SHA1 encryption method at the same time as the previous MD5, but the algorithm is relatively simple, so I will briefly mention it here. The SHA256 and SHA512 we are about to talk about here are both encryption functions from the SHA2 family. You may have guessed it by looking at the names. These two encryption methods generate hash strings of 256 and 512 bit length respectively.

How to use them is as follows:

$password = hash("sha256", $password);

PHP has a built-in hash() function. You only need to pass the encryption method to the hash() function. You can directly specify sha256, sha512, md5, sha1 and other encryption methods.

Salt value

In the encryption process, we also have a very common little partner: salt value. Yes, when we encrypt, we will actually add an extra string to the encrypted string to achieve a certain level of security:

Function generateHashWithSalt($password) {

$intermediateSalt = md5(uniqid(rand(), true));

 $salt = substr($intermediateSalt, 0, 6);

return hash("sha256", $password . $salt);

 }

Bcrypt

If I were to suggest an encryption method, Bcrypt may be the minimum requirement I recommend to you, because I will strongly recommend the Hashing API that you will talk about later, but Bcrypt is also a relatively good encryption. way.

Function generateHash($password) {

 if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {

 $salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);

return crypt($password, $salt);

 }

 }

Bcrypt is actually a combination of Blowfish and crypt() functions. Here we use CRYPT_BLOWFISH to determine whether Blowfish is available, and then generate a salt value as above. However, it should be noted here that the salt value of crypt() must be $2a $ or $2y$, please refer to the link below for detailed information:

 http://www.php.net/security/crypt_blowfish.php

More information can be found here:

http://php.net/manual/en/function.crypt.php

Password Hashing API

Here is our highlight. Password Hashing API is a new feature only available after PHP 5.5. It mainly provides the following functions for us to use:

Password_hash() – Encrypt the password.

password_verify() – Verify the encrypted password and check whether the hash string is consistent.

Password_needs_rehash() – Re-encrypt passwords.

Password_get_info() – Returns the name of the encryption algorithm and some related information.

Although the crypt() function is sufficient for use, password_hash() not only makes our code shorter, but also gives us better security protection. Therefore, it is now officially recommended by PHP This method is used to encrypt the user's password. Many popular frameworks such as Laravel use this encryption method.

 $hash = password_hash($passwod, PASSWORD_DEFAULT);

Yes, it’s that simple, one line of code, All done.

PASSWORD_DEFAULT is currently using Bcrypt, so I would recommend this above. However, because Password Hashing API does a better job, I must solemnly recommend Password Hashing API to you. What needs to be noted here is that if your code uses the PASSWORD_DEFAULT encryption method, then in the database table, the password field must be set to more than 60 characters in length. You can also use PASSWORD_BCRYPT. In this case, the encrypted string will always be 60 characters in length.

When using password_hash() here, you don’t have to provide the salt value (salt) and the consumption value (cost). You can understand the latter as a performance consumption value. The larger the cost, the more complex the encryption algorithm is, and the more expensive it is. The memory will be larger. Of course, if you need to specify the corresponding salt value and consumption value, you can write like this:

 $options = [

 'salt' => custom_function_for_salt(), //write your own code to generate a suitable salt

 'cost' => 12 // the default cost is 10

 ];

$hash = password_hash($password, PASSWORD_DEFAULT, $options);

After the password is encrypted, we need to verify the password to determine whether the password entered by the user is correct:

 if (password_verify($password, $hash)) {

// Pass

 }

else {

// Invalid

 }

It’s very simple. Just use password_verify to verify our previously encrypted string (stored in the database).

However, if sometimes we need to change our encryption method, such as one day we suddenly want to change the salt value or increase the consumption value, we will use the password_needs_rehash() function at this time:

 if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {

 // cost change to 12

 $hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);

// don't forget to store the new hash!

 }

Only in this way will PHP’s Password Hashing API know that we have changed the encryption method again. The main purpose of this is for subsequent password verification.

Simply put password_get_info(), this function can generally see the following three pieces of information:

algo – algorithm example

algoName – Algorithm name

options - optional parameters during encryption

So, start using PHP 5.5 now, and don’t worry about lower versions anymore.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1041132.htmlTechArticleSeveral ways for PHP to handle passwords. When using PHP to develop web applications, many applications will require users to register. When registering, we need to process the user's information. The most common...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? Apr 03, 2025 am 12:03 AM

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.

See all articles