首頁 後端開發 php教程 ecshop的aes加密(封裝)的實例教學

ecshop的aes加密(封裝)的實例教學

Jun 28, 2017 am 10:38 AM
ecshop 加密 封裝

  從一家做shopex,ecstore的公司到一家做b2b的ecshop的公司...來了就要實戰,其他的不說了,先來了解什麼是php的aes加密吧?

  aes(高級加密標準),AES的區塊長度固定為128 比特,密鑰長度則可以是128,192或256比特;是一個可逆的加密方式,同md5不同。

  AES分為幾種模式,例如ECB,CBC,CFB等等,這些模式除了ECB由於沒有使用IV而不太安全,其他模式差異並沒有太明顯,大部分的區別在IV和KEY來計算密文的方法略有區別。

iv的作用?

  IV稱為初始向量,不同的IV加密後的字串是不同的,加密和解密需要相同的IV,既然IV看起來和key一樣,卻還要多一個IV的目的,對於每個區塊來說,key是不變的,但是只有第一個區塊的IV是使用者提供的,其他區塊IV都是自動產生。
  IV的長度為16位元組。超過或不足,可能實現的程式庫都會進行補齊或截斷。但是由於塊的長度是16字節,所以一般可以認為需要的IV是16位元組。

到現在對aes有了一定的了解,就開始上程式碼吧。

<?phpclass cryptaes{protected $cipher = MCRYPT_RIJNDAEL_128;protected $mode = MCRYPT_MODE_ECB;protected $pad_method = &#39;&#39;;protected $secret_key = &#39;&#39;;protected $iv = &#39;&#39;; public function set_cipher($cipher)
    {$this->cipher = $cipher;
    } public function set_mode($mode)
    {$this->mode = $mode;
    } public function set_iv($iv)
    {$this->iv = $iv;
    } public function set_key($key)
    {$this->secret_key = $key;
    } public function require_pkcs5()
    {$this->pad_method = 'pkcs5';
    } protected function pad_or_unpad($str, $ext)
    {if ( is_null($this->pad_method) )
        {return $str;
        }else{$func_name = __CLASS__ . '::' . $this->pad_method . '_' . $ext . 'pad';if ( is_callable($func_name) )
            {$size = mcrypt_get_block_size($this->cipher, $this->mode);return call_user_func($func_name, $str, $size);
            }
        }return $str;
    } protected function pad($str)
    {return $this->pad_or_unpad($str, '');
    } protected function unpad($str)
    {return $this->pad_or_unpad($str, 'un');
    }     //加密类public function encrypt($str)
    {print_r($str);$str = $this->pad($str);$td = mcrypt_module_open($this->cipher, '', $this->mode, ''); if ( empty($this->iv) )
        {$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        }else{$iv = $this->iv;
        }
 
        mcrypt_generic_init($td, $this->secret_key, $iv);$cyper_text = mcrypt_generic($td, $str);$rt=base64_encode($cyper_text);//$rt = bin2hex($cyper_text);mcrypt_generic_deinit($td);
        mcrypt_module_close($td); return $rt;
    }     //解密类public function decrypt($str){$td = mcrypt_module_open($this->cipher, '', $this->mode, ''); if ( empty($this->iv) )
        {$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        }else{$iv = $this->iv;
        }
 
        mcrypt_generic_init($td, $this->secret_key, $iv);//$decrypted_text = mdecrypt_generic($td, self::hex2bin($str));$decrypted_text = mdecrypt_generic($td, base64_decode($str));$rt = $decrypted_text;
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td); return $this->unpad($rt);
    } public static function hex2bin($hexdata) {$bindata = '';$length = strlen($hexdata);for ($i=0; $i < $length; $i += 2)
        {$bindata .= chr(hexdec(substr($hexdata, $i, 2)));
        }return $bindata;
    } public static function pkcs5_pad($text, $blocksize)
    {$pad = $blocksize - (strlen($text) % $blocksize);return $text . str_repeat(chr($pad), $pad);
    } public static function pkcs5_unpad($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);
    }
}?>
登入後複製

 aes加密解密封裝類別封裝好了,在需要的地方加密:

require_once(ROOT_PATH . 'includes/lib_smt_cryptaes.php'); //ecshop引入文件方式$aes_obj     = new cryptaes();$iv         = '12345678baiducom';$privateKey = '12345678baiducom';$data['a'] =  ‘周二’;$data['b'] =  ‘周三’;$data['c'] =  ‘周四’;$da = json_encode($data);$aes_obj->set_key($privateKey);$aes_obj->require_pkcs5();$aes_obj->set_iv($iv);$il = $aes_obj->encrypt($da);//写入cookiesetcookie('il', $il,time()+360000); //加密结果$il
登入後複製

這邊我想傳遞的是一個數組,要注意的是aes只能加密字串。需要轉換為字串。

 

         = ['il'(ROOT_PATH . 'includes/lib_smt_cryptaes.php'     =      = '12345678baiducom';         = '12345678baiducom'->set_key(->->set_iv( = ->decrypt( = json_decode(,);    
       print_r($j_token);//解密结果
登入後複製

 這樣就完成了aes的加密,並且傳送。

歡迎大家提出問題,大家一起交流,一起成長。

以上是ecshop的aes加密(封裝)的實例教學的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

集邦諮詢:英偉達 Blackwell 平台產品帶動台積電今年 CoWoS 產能提升 150% 集邦諮詢:英偉達 Blackwell 平台產品帶動台積電今年 CoWoS 產能提升 150% Apr 17, 2024 pm 08:00 PM

本站4月17日消息,集邦諮詢(TrendForce)近日發布報告,認為英偉達Blackwell新平台產品需求看漲,預估帶動台積電2024年CoWoS封裝總產能提升逾150%。英偉達Blackwell新平台產品包含B系列的GPU,以及整合英偉達自家GraceArmCPU的GB200加速卡等。集邦諮詢確認為供應鏈目前非常看好GB200,預估2025年出貨量預計超過百萬片,在英偉達高階GPU中的佔比達到40-50%。在英偉達計畫下半年交付GB200以及B100等產品,但上游晶圓封裝方面須進一步採用更複

winrar怎麼加密壓縮包-winrar加密壓縮包方法 winrar怎麼加密壓縮包-winrar加密壓縮包方法 Mar 23, 2024 pm 12:10 PM

小編將為大家介紹加密壓縮的三種方法:方法一:加密最簡單的加密方法,就是在加密檔案時輸入想要設定的密碼,完成加密和壓縮了。方法二:自動加密普通的加密方式,需要我們加密每個檔案的時候都需要輸入密碼,如果你想要加密大量壓縮包,並且密碼是一樣的話,那麼我們可以在WinRAR中設定自動加密,之後只要正常壓縮文件,WinRAR會為每個壓縮包添加密碼。方法如下:開啟WinRAR,點選選項–設定設定介面中,切換到【壓縮】,點選建立預設設定–設定密碼在這裡輸入我們想要設定的密碼,點選確定就完成設定了,我們只需要正

資料夾加密如何設定密碼不壓縮 資料夾加密如何設定密碼不壓縮 Feb 20, 2024 pm 03:27 PM

資料夾加密是一種常見的資料保護方法,它可以將資料夾中的內容加密,使得只有掌握解密密碼的人能夠存取其中的檔案。在進行資料夾加密時,有一些常見的方法可以用來設定密碼,而不需要壓縮檔案。首先,我們可以使用作業系統自帶的加密功能來設定資料夾密碼。對於Windows使用者來說,可以透過以下步驟來設定:選擇要加密的資料夾,滑鼠右鍵點選資料夾,選擇「屬性」選

蘋果手機相簿加密怎麼設定 蘋果手機相簿加密怎麼設定 Mar 02, 2024 pm 05:31 PM

在蘋果手機中,用戶可以根據自己的需求來加密相簿。有些用戶並不清楚該怎麼設定。可以將需要加密圖片加入備忘錄後,再去鎖定備忘錄即可,接下來就是小編為用戶帶來的手機相簿加密設定方法的介紹,有興趣的用戶快來一起看看吧!蘋果手機使用教學蘋果手機相簿加密怎麼設定答:將需要加密圖片加入備忘錄後,再去鎖定備忘錄即可詳情介紹:1、進入相冊,選擇需要加密的圖片,再點擊下方的【新增到】。 2、選擇【加入備忘錄】。 3.進入備忘錄,找到剛更創建的備忘錄,進入,點選右上角的【傳送】圖示。 4.點選下方的【鎖定備

AMD 'Strix Halo” FP11 封裝尺寸曝光:和英特爾 LGA1700 相當,比 Phoenix 大 60% AMD 'Strix Halo” FP11 封裝尺寸曝光:和英特爾 LGA1700 相當,比 Phoenix 大 60% Jul 18, 2024 am 02:04 AM

本站7月9日訊息,AMDZen5架構「Strix」系列處理器會有兩種封裝方案,其中較小的StrixPoint將採用FP8封裝,而StrixHalo將會採用FP11封裝。圖源:videocardz訊息源@Olrak29_最新曝料稱StrixHalo的FP11封裝尺寸為37.5mm*45mm(1687平方毫米),和英特爾AlderLake、RaptorLakeCPU的LGA-1700封裝尺寸相同。 AMD最新的PhoenixAPU採用FP8封裝方案,尺寸為25*40mm,這意味著StrixHalo的F

C++ 函式如何透過封裝程式碼來提高 GUI 開發的效率? C++ 函式如何透過封裝程式碼來提高 GUI 開發的效率? Apr 25, 2024 pm 12:27 PM

透過封裝程式碼,C++函數可以提高GUI開發效率:程式碼封裝:函數將程式碼分組到獨立單元,使程式碼易於理解和維護。可重複使用性:函數可建立通用功能供應用程式中重複使用,減少重複編寫和錯誤。簡潔程式碼:封裝程式碼讓主邏輯簡潔,方便閱讀和除錯。

加密老兵們的新項目 Analog:融資 1600 萬美元,有空投預期 加密老兵們的新項目 Analog:融資 1600 萬美元,有空投預期 Feb 22, 2024 pm 04:50 PM

原文作者:Meteor,ChainCatcher原文編輯:Marco,ChainCatcher近期,全鏈互通協議Analog因披露1600萬美元融資而進入公眾視野,投資機構包括TribeCapital、NGCVentures、Wintermute、GSR、NEAR、OrangeDAO,以及MikeNogratzO,以及MikeNogratz的另類資產管理公司SamaraAssetGroup、BalajiSrinivasan等。 2023年底,Analog在業界引起了一些轟動,他們在X平台發布了關於開放測試網註冊活動的

螢石雲視訊電腦版加密了怎麼解開? -螢石雲視訊電腦版退出全螢幕? 螢石雲視訊電腦版加密了怎麼解開? -螢石雲視訊電腦版退出全螢幕? Mar 18, 2024 pm 12:25 PM

螢石雲解除視訊加密的方法:有多種方法可以解除螢石雲視訊加密,其中一種是透過使用螢石雲手機App。用戶只需進入裝置列表,選擇要解密的攝影機並進入裝置詳情頁面。在裝置詳情頁,找到「設定」選項,然後選擇「影片加密」進行相關設定。在視訊加密設定介面中,可以選擇關閉視訊加密的選項,儲存設定即可完成解密操作。這種簡單的步驟可以讓使用者輕鬆解除視訊加密,提升攝影機的使用便利性。如果您使用螢石雲的電腦用戶端,同樣可以透過類似的步驟來取消視訊加密。只需登入後選擇對應的鏡頭,進入裝置詳情介面,然後在設定中尋找影片加

See all articles