PHP7 OpenSSL DES-EDE-CBC加解密

2020-07-16 10:06:14
1. 條件約束

之前PHP5上常使用的mcrypt庫在PHP7.1+上已經被移除,故我們採用openssl對資料進行加解密。

加密方式採用DES-EDE-CBC方式。

金鑰填充方式為:採用24位元金鑰,先將key進行MD5校驗取值,得出16位元字串,再取key MD5校驗值前8位元追加到先前的取值後面。由此組裝出24位元的金鑰。

2. 程式碼分享

<?php
class DesEdeCbc {
private $cipher, $key, $iv;
/**
 * DesEdeCbc constructor.
 * @param $cipher
 * @param $key
 * @param $iv
 */
public function __construct($cipher, $key, $iv) {
$this->cipher = $cipher;
$this->key= $this->getFormatKey($key);
$this->iv = $iv;
}
/**
 * @func  加密
 * @param $msg
 * @return string
 */
public function encrypt($msg) {
$des = @openssl_encrypt($msg, $this->cipher, $this->key, OPENSSL_RAW_DATA, $this->iv);
return base64_encode($des);
}
/**
 * @func  解密
 * @param $msg
 * @return string
 */
public function decrypt($msg) {
return @openssl_decrypt(base64_decode($msg), $this->cipher, $this->key, OPENSSL_RAW_DATA, $this->iv);
}
/**
 * @func  生成24位元長度的key
 * @param $skey
 * @return bool|string
 */
private function getFormatKey($skey) {
$md5Value= md5($skey);
$md5ValueLen = strlen($md5Value);
$key = $md5Value . substr($md5Value, 0, $md5ValueLen / 2);
return hex2bin($key);
}
}
$cipher = 'DES-EDE-CBC';
$msg = 'HelloWorld';
$key = '12345678';
$iv  = "x00x00x00x00x00x00x00x00";
$des = new DesEdeCbc($cipher, $key, $iv);
// 加密
$msg = $des->encrypt($msg);
echo '加密後: ' . $msg . PHP_EOL;
// 解密
$src = $des->decrypt($msg);
echo '解密後: ' . $src . PHP_EOL;

3. 一點說明

可以根據實際情況調整加密方式、key的填充方式、及iv向量來滿足不同的需求。

更多相關PHP7文章請存取:《PHP7》教學

以上就是PHP7 OpenSSL DES-EDE-CBC加解密的詳細內容,更多請關注TW511.COM其它相關文章!