des 是對稱性加密裡面常見一種,全稱為 data encryption standard,即資料加密標準,是一種使用金鑰加密的塊演算法。金鑰長度是64位(bit),超過位數金鑰被忽略。所謂對稱性加密即加密和解密金鑰相同,對稱性加密一般會按照固定長度,把待加密字串分成塊,不足一整塊或者剛好最後有特殊填充字元。
跨語言做 des 加密解密經常會出現問題,往往是填充方式不對、編碼不一致或者加密解密模式沒有對應上造成。常見的填充模式有: pkcs5、pkcs7、iso10126、ansix923、zero。加密模式有:des-ecb、des-cbc、des-ctr、des-ofb、des-cfb。
php 提供了 mcrypt 系列函式來實現 des 的加解密,但該擴充套件中的函式陸續被廢棄,自 php 7.2.0 起,會移到 pecl。
所以本**用了更通用的 openssl 方式實現 des 的加解密,具體的實現和使用**如下:
<?php
/** * openssl 實現的 des 加密類,支援各種 php 版本
*/class des
/*** 加密
** @param $str
* @return string
*/public function encrypt($str)
else if ($this->output == self::output_hex)
return $sign;
}/**
* 解密
** @param $encrypted
* @return string
*/public function decrypt($encrypted)
else if ($this->output == self::output_hex)
$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)
/*** 去填充
* * @param $str
* @return string
*/private function unpkcspadding($str)
);if ($pad > strlen($str))
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);
馬燕龍個人微博:
馬燕龍github主頁:
PHP 基礎篇 PHP 中 DES 加解密詳解
des 是對稱性加密裡面常見一種,全稱為 data encryption standard,即資料加密標準,是一種使用金鑰加密的塊演算法。金鑰長度是64位 bit 超過位數金鑰被忽略。所謂對稱性加密即加密和解密金鑰相同,對稱性加密一般會按照固定長度,把待加密字串分成塊,不足一整塊或者剛好最後有特殊填...
PHP 基礎篇 PHP 中 DES 加解密詳解
des 是對稱性加密裡面常見一種,全稱為 data encryption standard,即資料加密標準,是一種使用金鑰加密的塊演算法。金鑰長度是64位 bit 超過位數金鑰被忽略。所謂對稱性加密即加密和解密金鑰相同,對稱性加密一般會按照固定長度,把待加密字串分成塊,不足一整塊或者剛好最後有特殊填...
PHP 基礎篇 PHP結尾要不要加問號尖括號
加與不加,視情況而定。先定義一下兩者的區別。加結尾的 之後的內容視為 純文字直接輸出,直到再次碰到 或 不加的 之後的內容視為 php 除非沒有 了。像一些函式庫,類庫這類檔案,不加結尾比較好。這樣當它們被其他檔案包含的時候,可以避免一些因為有輸出而導致的錯誤。比如 如果 a.php 有結尾,並且後...