在php中可以透過Mcrypt系列函數來實現des的加解密,但該擴充中的函數陸續被廢棄,所以我們可以使用通用的OPENSSL方式來實現DES的加解密。
推薦:《PHP影片教學》
PHP 中DES 加解密詳解
#一、簡介
DES 是對稱性加密裡面常見一種,全稱為Data Encryption Standard,即資料加密標準,是一種使用金鑰加密的區塊演算法.密鑰長度是64位元(bit),超過位元密鑰被忽略。所謂對稱性加密即加密和解密金鑰相同,對稱性加密一般會依照固定長度,把待加密字串分成區塊,不足一整塊或剛好最後有特殊填充字元。
跨語言做 DES 加密解密經常會出現問題,往往是填充方式不對、編碼不一致或加密解密模式沒有對應上造成。常見的填滿模式有: pkcs5、pkcs7、iso10126、ansix923、zero。加密模式有:DES-ECB、DES-CBC、DES-CTR、DES-OFB、DES-CFB。
身為軟體開發者,可以透過工具測試DES 加密解密,這裡推薦一個線上工具:http://tool.chacuo.net/cryptdes
二、實作
PHP 提供了Mcrypt 系列函數來實現DES 的加解密,但該擴充中的函數陸續被廢棄,自PHP 7.2.0 起,會移到PECL。
所以本程式碼用了更通用的OPENSSL 方式實作DES 的加解密,具體的實作和使用程式碼如下:
<?php /** * openssl 实现的 DES 加密类,支持各种 PHP 版本 */ class DES { /** * @var string $method 加解密方法,可通过 openssl_get_cipher_methods() 获得 */ protected $method; /** * @var string $key 加解密的密钥 */ protected $key; /** * @var string $output 输出格式 无、base64、hex */ protected $output; /** * @var string $iv 加解密的向量 */ protected $iv; /** * @var string $options */ protected $options; // output 的类型 const OUTPUT_NULL = ''; const OUTPUT_BASE64 = 'base64'; const OUTPUT_HEX = 'hex'; /** * DES constructor. * @param string $key * @param string $method * ECB DES-ECB、DES-EDE3 (为 ECB 模式时,$iv 为空即可) * CBC DES-CBC、DES-EDE3-CBC、DESX-CBC * CFB DES-CFB8、DES-EDE3-CFB8 * CTR * OFB * * @param string $output * base64、hex * * @param string $iv * @param int $options */ public function __construct($key, $method = 'DES-ECB', $output = '', $iv = '', $options = OPENSSL_RAW_DATA | OPENSSL_NO_PADDING) { $this->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);
三、相關連結
#DES 加上解密工具:http://tool.chacuo.net/cryptdes
Mcrypt 官方文件:http://php.net/manual/zh/book.mcrypt.php
#OPENSSL加解密函數官方文件:
openssl_encrypt:http://php.net/manual/zh/function.openssl-encrypt.php
openssl_decrypt:http://php.net/manual /zh/function.openssl-decrypt.php
以上是php如何實作des加解密的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。