Home>Article>Backend Development> How to implement des encryption and decryption in php

How to implement des encryption and decryption in php

藏色散人
藏色散人 Original
2020-08-21 10:12:54 4851browse

In PHP, the Mcrypt series of functions can be used to implement DES encryption and decryption, but the functions in this extension have been gradually abandoned, so we can use the general OPENSSL method to implement DES encryption and decryption.

How to implement des encryption and decryption in php

Recommended: "PHP Video Tutorial"

Detailed Explanation of DES Encryption and Decryption in PHP

1. Introduction

DES is a common type of symmetric encryption. The full name is Data Encryption Standard, which is a data encryption standard. It is a block encrypted using a key. algorithm. The key length is 64 bits (bit), and the key exceeding the number of bits is ignored. The so-called symmetric encryption means that the encryption and decryption keys are the same. Symmetric encryption generally divides the string to be encrypted into blocks according to a fixed length, which is less than a whole block or there is a special padding character at the end.

Problems often occur when doing DES encryption and decryption across languages, often caused by incorrect filling methods, inconsistent encoding, or mismatched encryption and decryption modes. Common filling modes are: pkcs5, pkcs7, iso10126, ansix923, zero. Encryption modes include: DES-ECB, DES-CBC, DES-CTR, DES-OFB, and DES-CFB.

As a software developer, you can test DES encryption and decryption through tools. Here is an online tool recommended: http://tool.chacuo.net/cryptdes

2. Implementation

PHP provides the Mcrypt series of functions to implement DES encryption and decryption, but the functions in this extension have been gradually abandoned. Starting from PHP 7.2.0, they will be moved to PECL.

So this code uses the more general OPENSSL method to implement DES encryption and decryption. The specific implementation and usage code is as follows:

key = $key; $this->method = $method; $this->output = $output; $this->iv = $iv; $this->options = $options; } /** * 加密 * * @param $str * @return string */ public function encrypt($str) { $str = $this->pkcsPadding($str, 8); $sign = openssl_encrypt($str, $this->method, $this->key, $this->options, $this->iv); if ($this->output == self::OUTPUT_BASE64) { $sign = base64_encode($sign); } else if ($this->output == self::OUTPUT_HEX) { $sign = bin2hex($sign); } return $sign; } /** * 解密 * * @param $encrypted * @return string */ public function decrypt($encrypted) { if ($this->output == self::OUTPUT_BASE64) { $encrypted = base64_decode($encrypted); } else if ($this->output == self::OUTPUT_HEX) { $encrypted = hex2bin($encrypted); } $sign = @openssl_decrypt($encrypted, $this->method, $this->key, $this->options, $this->iv); $sign = $this->unPkcsPadding($sign); $sign = rtrim($sign); return $sign; } /** * 填充 * * @param $str * @param $blocksize * @return string */ private function pkcsPadding($str, $blocksize) { $pad = $blocksize - (strlen($str) % $blocksize); return $str . str_repeat(chr($pad), $pad); } /** * 去填充 * * @param $str * @return string */ private function unPkcsPadding($str) { $pad = ord($str{strlen($str) - 1}); if ($pad > strlen($str)) { return false; } return substr($str, 0, -1 * $pad); } } $key = 'key123456'; $iv = 'iv123456'; // DES CBC 加解密 $des = new DES($key, 'DES-CBC', DES::OUTPUT_BASE64, $iv); echo $base64Sign = $des->encrypt('Hello DES CBC'); echo "\n"; echo $des->decrypt($base64Sign); echo "\n"; // DES ECB 加解密 $des = new DES($key, 'DES-ECB', DES::OUTPUT_HEX); echo $base64Sign = $des->encrypt('Hello DES ECB'); echo "\n"; echo $des->decrypt($base64Sign);

3. Related links

DES encryption and decryption tool: http://tool.chacuo.net/cryptdes

Mcrypt Official documentation: http://php.net/manual/zh/book.mcrypt.php

OPENSSL Official documentation of encryption and decryption functions:

openssl_encrypt: http://php.net/manual/zh/function.openssl-encrypt.php

openssl_decrypt: http://php.net/manual /zh/function.openssl-decrypt.php

The above is the detailed content of How to implement des encryption and decryption in php. 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