search
HomeBackend DevelopmentPHP TutorialDetailed explanation of php encryption and decryption

Detailed explanation of php encryption and decryption

May 11, 2018 pm 03:26 PM
phpencrypt and decodeDetailed 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欢迎您

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;]); //解密 我爱北京天安门 /我爱祖国

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

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
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
What data can be stored in a PHP session?What data can be stored in a PHP session?May 02, 2025 am 12:17 AM

PHPsessionscanstorestrings,numbers,arrays,andobjects.1.Strings:textdatalikeusernames.2.Numbers:integersorfloatsforcounters.3.Arrays:listslikeshoppingcarts.4.Objects:complexstructuresthatareserialized.

How do you start a PHP session?How do you start a PHP session?May 02, 2025 am 12:16 AM

TostartaPHPsession,usesession_start()atthescript'sbeginning.1)Placeitbeforeanyoutputtosetthesessioncookie.2)Usesessionsforuserdatalikeloginstatusorshoppingcarts.3)RegeneratesessionIDstopreventfixationattacks.4)Considerusingadatabaseforsessionstoragei

What is session regeneration, and how does it improve security?What is session regeneration, and how does it improve security?May 02, 2025 am 12:15 AM

Session regeneration refers to generating a new session ID and invalidating the old ID when the user performs sensitive operations in case of session fixed attacks. The implementation steps include: 1. Detect sensitive operations, 2. Generate new session ID, 3. Destroy old session ID, 4. Update user-side session information.

What are some performance considerations when using PHP sessions?What are some performance considerations when using PHP sessions?May 02, 2025 am 12:11 AM

PHP sessions have a significant impact on application performance. Optimization methods include: 1. Use a database to store session data to improve response speed; 2. Reduce the use of session data and only store necessary information; 3. Use a non-blocking session processor to improve concurrency capabilities; 4. Adjust the session expiration time to balance user experience and server burden; 5. Use persistent sessions to reduce the number of data read and write times.

How do PHP sessions differ from cookies?How do PHP sessions differ from cookies?May 02, 2025 am 12:03 AM

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

How does PHP identify a user's session?How does PHP identify a user's session?May 01, 2025 am 12:23 AM

PHPidentifiesauser'ssessionusingsessioncookiesandsessionIDs.1)Whensession_start()iscalled,PHPgeneratesauniquesessionIDstoredinacookienamedPHPSESSIDontheuser'sbrowser.2)ThisIDallowsPHPtoretrievesessiondatafromtheserver.

What are some best practices for securing PHP sessions?What are some best practices for securing PHP sessions?May 01, 2025 am 12:22 AM

The security of PHP sessions can be achieved through the following measures: 1. Use session_regenerate_id() to regenerate the session ID when the user logs in or is an important operation. 2. Encrypt the transmission session ID through the HTTPS protocol. 3. Use session_save_path() to specify the secure directory to store session data and set permissions correctly.

Where are PHP session files stored by default?Where are PHP session files stored by default?May 01, 2025 am 12:15 AM

PHPsessionfilesarestoredinthedirectoryspecifiedbysession.save_path,typically/tmponUnix-likesystemsorC:\Windows\TemponWindows.Tocustomizethis:1)Usesession_save_path()tosetacustomdirectory,ensuringit'swritable;2)Verifythecustomdirectoryexistsandiswrita

See all articles

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!