Home Backend Development PHP Tutorial Detailed explanation of php encryption and decryption

Detailed explanation of php encryption and decryption

May 11, 2018 pm 03:26 PM
php encrypt and decode Detailed explanation

I don’t know how much you know about PHP encryption and decryption. This article mainly shares with you the knowledge about PHP encryption and decryption. I hope it can help you.

A symmetric encryption

1. Symmetric encryption of mycyrpt:

/** 
* @param $key  //数据加密密钥 由自己定义,长度有限制 string 
* @param $string  //需要进行加解密的字符串 string 
* @param $decrypt //加密还是解密 (最简单的,0代表加密,1代表解密) 
* @return string */
function encryptDecrypt($key, $string, $decrypt)
{   
 if(!$decrypt){        
 //加密        
 $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));        
 return $encrypted;    
 }else{       
 //解密        
 $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "12");        
 return $decrypted;    
 }

}//使用方法:echo encryptDecrypt('passwordgg', 'Hello欢迎您',0);  
//加密  
ZbKOQy8uarg6nsIrpjZnJvaIDMuAAIBH3sjhBEqYujM=echo encryptDecrypt('passwordgg', 'ZbKOQy8uarg6nsIrpjZnJvaIDMuAAIBH3sjhBEqYujM=',1);  
//解密  
Hello欢迎您
Copy after login

Note: This method has been abandoned since php7.1, and openssl_encrypt and openssl_decrypt are used. The official recommendation is to use the openssl family for encryption and decryption

2. Symmetric encryption in the OpenSSL extension

/** 
* @param string $data 需要加解密的数据字符串 string
* @param int $yes 加密还是解密(1表示加密,0表示解密) 
* @param string $key 数据加密密钥 
* @param string $iv 初始化向量 //注:这里为了显示效果,暂时将iv存储到session中, 
* @param string $iv 实际应用中,应该将iv和加密后的字符串都存储在数据库 
* @param string $encryptMethod  
数据加密方式 100余种,可通过openssl_get_cipher_methods()函数获取, 
* @param string $encryptMethod  选择其中一种(如果选择cbc结尾的加密算法,
需要初始化向量iv,如本例) 
* @return string 
*/
function openssl_crypt($data='',$yes=1,$key='secret',$iv='',$encryptMethod='aes-256-cbc'){    
if($yes)
{        
$ivLength = openssl_cipher_iv_length($encryptMethod); //获取该加密算法iv应该具有的长度        
$iv = openssl_random_pseudo_bytes($ivLength, $isStrong); //生成iv(初始化向量)       
 if (false === $iv && false === $isStrong) 
 {            
 die('IV generate failed');        
 }        
//加密        
$encrypted = openssl_encrypt($data, $encryptMethod, $key, 0, $iv);        
$_SESSION['iv']=$iv; //将iv存到session中        
return $encrypted;    
}else{       
 //解密        
 $decrypted = openssl_decrypt($data, $encryptMethod, $key, 0, $iv);        
 return $decrypted;    
 }
}//使用方法
echo $a=openssl_crypt('我爱北京天安门 /我爱祖国',1,'passG506'); //加密 
LMcwSGlTFijXRdcPaccYoc08xgr7NydtZ+Wrhdv/145gF3/ayKQCJvRLmvhs5ec8echo "<br>";
echo openssl_crypt($a,0,&#39;passG506&#39;,$_SESSION[&#39;iv&#39;]); //解密 我爱北京天安门 /我爱祖国
Copy after login

Note: 1. Why should iv be generated and what is the role of iv

[

Looking back at the encryption algorithm list returned by openssl_get_cipher_methods(), there are many names with the word "CBC" in the middle. These encryption algorithms use the same encryption mode, which is Cipher Block Chaining.

In the CBC mode encryption algorithm, the plaintext will be divided into several groups and encrypted in groups. The encryption process of each group depends on the data of the previous group: it needs to be XORed with the data of the previous group to generate the ciphertext of this group. So who does the first group rely on? It depends on the IV, so this is why the IV is called the initialization vector. IV is the abbreviation of initialization vector

IV should be randomly generated, so the code uses openssl_random_pseudo_bytes() to generate IV. This function receives an int, representing the length of the IV that needs to be generated.
IV length varies with encryption algorithms. Most people cannot remember the IV lengths required by so many algorithms. So use the openssl_cipher_iv_length() function directly. This function returns an int, indicating the IV length required by the encryption algorithm:

echo openssl_cipher_iv_length(&#39;AES-256-CBC&#39;); // 16
echo openssl_cipher_iv_length(&#39;BC-CBC&#39;); // 8
echo openssl_cipher_iv_length(&#39;AES-128-ECB&#39;); // 0
Copy after login

For example, AES-256-CBC requires a 16-bit IV, and BC-CBC requires 8 bits. IV, and AES-128-ECB does not require IV, so 0 is returned.

2. Issues that need to be paid attention to during use

When performing encryption and decryption, except for the first parameter of the two functions, the remaining parameters must be guaranteed Only if they are the same can decryption be successful. Finally, when using an encryption algorithm that requires an IV, you need to pay attention:
The $iv parameter must be passed, otherwise PHP will throw a Warning
IV should be randomly generated (for example, using openssl_random_pseudo_bytes()), You cannot set it manually
The IV should be regenerated for each encryption. Do not be lazy and use the same IV for multiple encryptions
The IV must be saved together with the ciphertext (otherwise it will not be able to decrypt). It can be directly attached to the ciphertext. After the text string, you can also save it separately

If you don’t understand, you can refer to symmetric encryption

二Asymmetric encryption

The commonly used asymmetric encryption is the RSA algorithm , Asymmetric encryption and decryption use different keys, one of which is public as the public key, and the other is only owned by the private owner as the private key.

The information encrypted with the private key can only be decrypted by the public key, or conversely, the information encrypted with the public key can only be decrypted by the private key.

Before RSA encryption and decryption, you need to generate a pair of public and private keys. You can use the RSA key generation tool openssl that comes with Linux to obtain a pair of public and private keys. You can also use the PHP openssl extension function to generate a pair of public and private keys.

See: RSA Asymmetric Encryption

Note: The disadvantage of asymmetric encryption is that confidentiality and decryption take a long time and are slow, and are only suitable for encrypting a small amount of data.

If you want to have fast encryption speed but also want to ensure that the data is more secure than symmetric encryption, you can use hybrid encryption. (That is, perform symmetric encryption on the data and asymmetric encryption on the key)

When decrypting, first use asymmetric encryption to obtain the key, and then use the key to decrypt the ciphertext to obtain the plaintext.

Related recommendations:

How PHP uses custom keys to encrypt and decrypt data

mysql functions about encryption and decryption

php string encryption and decryption implementation process sharing

The above is the detailed content of Detailed explanation of php encryption and decryption. For more information, please follow other related articles on the PHP Chinese website!

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

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.

PHP and Python: Comparing Two Popular Programming Languages PHP and Python: Comparing Two Popular Programming Languages Apr 14, 2025 am 12:13 AM

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

See all articles