PHP 基礎篇 PHP 中 DES 加解密詳解

2021-09-26 10:02:19 字數 1919 閱讀 7843

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);

三、相關鏈結

PHP 基礎篇 PHP 中 DES 加解密詳解

des 是對稱性加密裡面常見一種,全稱為 data encryption standard,即資料加密標準,是一種使用金鑰加密的塊演算法。金鑰長度是64位 bit 超過位數金鑰被忽略。所謂對稱性加密即加密和解密金鑰相同,對稱性加密一般會按照固定長度,把待加密字串分成塊,不足一整塊或者剛好最後有特殊填...

PHP 基礎篇 PHP 中 DES 加解密詳解

des 是對稱性加密裡面常見一種,全稱為 data encryption standard,即資料加密標準,是一種使用金鑰加密的塊演算法。金鑰長度是64位 bit 超過位數金鑰被忽略。所謂對稱性加密即加密和解密金鑰相同,對稱性加密一般會按照固定長度,把待加密字串分成塊,不足一整塊或者剛好最後有特殊填...

PHP 基礎篇 PHP結尾要不要加問號尖括號

加與不加,視情況而定。先定義一下兩者的區別。加結尾的 之後的內容視為 純文字直接輸出,直到再次碰到 或 不加的 之後的內容視為 php 除非沒有 了。像一些函式庫,類庫這類檔案,不加結尾比較好。這樣當它們被其他檔案包含的時候,可以避免一些因為有輸出而導致的錯誤。比如 如果 a.php 有結尾,並且後...