PHP OpenSSL DES算法加密和解密
在網絡通信中,加密技術是必不可少的一部分。其中,對稱密鑰加密是一種廣泛使用的方法。而DES算法作為一種對稱密鑰加密算法,在php中也有相應的實現方式。
下面以示例代碼的形式展示php openssl des算法的使用方法。
des_encrypt和des_decrypt函數
首先,先來看一下用于加密和解密的兩個函數:des_encrypt和des_decrypt。
/** * des_encrypt * * @param string $data 要加密的數據 * @param string $key 密鑰 * * @return string */ function des_encrypt($data, $key) { $key = substr(md5($key), 0, 8); $data = pkcs7_padding($data); return openssl_encrypt($data, 'DES-CBC', $key, OPENSSL_RAW_DATA, $key); } /** * des_decrypt * * @param string $data 要解密的數據 * @param string $key 密鑰 * * @return string */ function des_decrypt($data, $key) { $key = substr(md5($key), 0, 8); $decrypted = openssl_decrypt($data, 'DES-CBC', $key, OPENSSL_RAW_DATA, $key); return pkcs7_unpadding($decrypted); }
值得注意的是,加密和解密所用到的$key必須是8位長的字符串,如果不夠長則需要進行前面補0等操作,否則無法進行加密解密。
pkcs7_padding和pkcs7_unpadding函數
在加密和解密函數中,還用到了如下兩個輔助函數:
/** * pkcs7_padding * * @param string $data 要補全的數據 * @param int $block_size 塊長 * * @return string */ function pkcs7_padding($data, $block_size = 8) { $padding = $block_size - (strlen($data) % $block_size); return $data . str_repeat(chr($padding), $padding); } /** * pkcs7_unpadding * * @param string $text 要取消補全的數據 * * @return string */ function pkcs7_unpadding($text) { $pad = ord($text{strlen($text) - 1}); if ($pad >strlen($text)) { return false; } if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) { return false; } return substr($text, 0, -1 * $pad); }
其中,pkcs7_padding用于對要加密的數據進行補全,這樣可以保證數據長度與塊的長度相等,方便加密操作。
而pkcs7_unpadding則是對解密后的數據進行補全的逆操作,恢復到原先的長度。
示例代碼
下面,我們來看一下示例代碼:
$data = 'Hello World!'; $key = '12345678'; $encrypted = des_encrypt($data, $key); echo 'Encrypted: '.base64_encode($encrypted)."\n"; $decrypted = des_decrypt($encrypted, $key); echo 'Decrypted: '.$decrypted."\n";
運行上述代碼,會得到如下輸出:
Encrypted: Fz1/guvy6bi+Uwq3f3J5kw== Decrypted: Hello World!
可以看到,利用des_encrypt和des_decrypt函數以及對應的輔助函數,我們成功地對數據進行了加密和解密。
結語
在網絡傳輸中,加密技術是保護數據安全的重要手段。而PHP OpenSSL DES算法作為一種對稱密鑰加密算法,可以通過使用相應的函數對數據進行加密和解密操作。本文就是一篇介紹php openssl des算法的文章,希望對讀者有所幫助。