php对称加密算法示例
这篇文章主要介绍了php对称加密算法示例,需要的朋友可以参考下
php对称加密算法
KEY 是之前定义的常量
复制代码 代码如下:
Mcrypt::encrypt();
Mcrypt::decrypt();
复制代码 代码如下:
defined('ROOT') or exit('Access Denied');
class Mcrypt{
public static function encrypt($code){
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5(KEY), $code, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}
public static function decrypt($code){
return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5(KEY), base64_decode($code), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND));
}
}
常用对称加密算法(DES/AES)类
xcrypt.php
复制代码 代码如下:
/**
* 常用对称加密算法类
* 支持密钥:64/128/256 bit(字节长度8/16/32)
* 支持算法:DES/AES(根据密钥长度自动匹配使用:DES:64bit AES:128/256bit)
* 支持模式:CBC/ECB/OFB/CFB
* 密文编码:base64字符串/十六进制字符串/二进制字符串流
* 填充方式: PKCS5Padding(DES)
*
* @author: linvo
* @version: 1.0.0
* @date: 2013/1/10
*/
class Xcrypt{
private $mcrypt;
private $key;
private $mode;
private $iv;
private $blocksize;
/**
* 构造函数
*
* @param string 密钥
* @param string 模式
* @param string 向量("off":不使用 / "auto":自动 / 其他:指定值,,长度同密钥)
*/
public function __construct($key, $mode = 'cbc', $iv = "off"){
switch (strlen($key)){
case 8:
$this->mcrypt = MCRYPT_DES;
break;
case 16:
$this->mcrypt = MCRYPT_RIJNDAEL_128;
break;
case 32:
$this->mcrypt = MCRYPT_RIJNDAEL_256;
break;
default:
die("Key size must be 8/16/32");
}
$this->key = $key;
switch (strtolower($mode)){
case 'ofb':
$this->mode = MCRYPT_MODE_OFB;
if ($iv == 'off') die('OFB must give a IV'); //OFB必须有向量
break;
case 'cfb':
$this->mode = MCRYPT_MODE_CFB;
if ($iv == 'off') die('CFB must give a IV'); //CFB必须有向量
break;
case 'ecb':
$this->mode = MCRYPT_MODE_ECB;
$iv = 'off'; //ECB不需要向量
break;
case 'cbc':
default:
$this->mode = MCRYPT_MODE_CBC;
}
switch (strtolower($iv)){
case "off":
$this->iv = null;
break;
case "auto":
$source = PHP_OS=='WINNT' ? MCRYPT_RAND : MCRYPT_DEV_RANDOM;
$this->iv = mcrypt_create_iv(mcrypt_get_block_size($this->mcrypt, $this->mode), $source);
break;
default:
$this->iv = $iv;
}
}
/**
* 获取向量值
* @param string 向量值编码(base64/hex/bin)
* @return string 向量值
*/
public function getIV($code = 'base64'){
switch ($code){
case 'base64':
$ret = base64_encode($this->iv);
break;
case 'hex':
$ret = bin2hex($this->iv);
break;
case 'bin':
default:
$ret = $this->iv;
}
return $ret;
}
/**
* 加密
* @param string 明文
* @param string 密文编码(base64/hex/bin)
* @return string 密文
*/
public function encrypt($str, $code = 'base64'){
if ($this->mcrypt == MCRYPT_DES) $str = $this->_pkcs5Pad($str);
if (isset($this->iv)) {
$result = mcrypt_encrypt($this->mcrypt, $this->key, $str, $this->mode, $this->iv);
} else {
@$result = mcrypt_encrypt($this->mcrypt, $this->key, $str, $this->mode);
}
switch ($code){
case 'base64':
$ret = base64_encode($result);
break;
case 'hex':
$ret = bin2hex($result);
break;
case 'bin':
default:
$ret = $result;
}
return $ret;
}
/**
* 解密
* @param string 密文
* @param string 密文编码(base64/hex/bin)
* @return string 明文
*/
public function decrypt($str, $code = "base64"){
$ret = false;
switch ($code){
case 'base64':
$str = base64_decode($str);
break;
case 'hex':
$str = $this->_hex2bin($str);
break;
case 'bin':
default:
}
if ($str !== false){
if (isset($this->iv)) {
$ret = mcrypt_decrypt($this->mcrypt, $this->key, $str, $this->mode, $this->iv);
} else {
@$ret = mcrypt_decrypt($this->mcrypt, $this->key, $str, $this->mode);
}
if ($this->mcrypt == MCRYPT_DES) $ret = $this->_pkcs5Unpad($ret);
$ret = trim($ret);
}
return $ret;
}
private function _pkcs5Pad($text){
$this->blocksize = mcrypt_get_block_size($this->mcrypt, $this->mode);
$pad = $this->blocksize - (strlen($text) % $this->blocksize);
return $text . str_repeat(chr($pad), $pad);
}
private function _pkcs5Unpad($text){
$pad = ord($text{strlen($text) - 1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false;
$ret = substr($text, 0, -1 * $pad);
return $ret;
}
private function _hex2bin($hex = false){
$ret = $hex !== false && preg_match('/^[0-9a-fA-F]+$/i', $hex) ? pack("H*", $hex) : false;
return $ret;
}
}
上面类的使用方法
复制代码 代码如下:

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

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

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。
