您好,登錄后才能下訂單哦!
如何在PHP中實現一個AES 128位加密算法?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
具體如下:
/* 加密算法一般分為兩種:對稱加密算法和非對稱加密算法。 對稱加密 對稱加密算法是消息發送者和接收者使用同一個密匙,發送者使用密匙加密了文件, 接收者使用同樣的密匙解密,獲取信息。常見的對稱加密算法有:des/aes/3des. 對稱加密算法的特點有:速度快,加密前后文件大小變化不大,但是密匙的保管是個大問題 ,因為消息發送方和接收方任意一方的密匙丟失,都會導致信息傳輸變得不安全。 非對稱加密 與對稱加密相對的是非對稱加密,非對稱加密的核心思想是使用一對相對的密匙 分為公匙和私匙,私匙自己安全保存,而將公匙公開。公鑰與私鑰是一對,如果用公鑰對數據進行加密, 只有用對應的私鑰才能解密;如果用私鑰對數據進行加密,那么只有用對應的公鑰才能解密發送數據前只需要使用接收方的公匙加密就行了。 常見的非對稱加密算法有RSA/DSA:非對稱加密雖然沒有密匙保存問題,但其計算量大,加密速度很慢,有時候我們還需要對大塊數據進行分塊加密。 數字簽名 為了保證數據的完整性,還需要通過散列函數計算得到一個散列值,這個散列值被稱為數字簽名。其特點有: 無論原始數據是多大,結果的長度相同的; 輸入一樣,輸出也相同; 對輸入的微小改變,會使結果產生很大的變化; 加密過程不可逆,無法通過散列值得到原來的數據; 常見的數字簽名算法有md5,hash2等算法。 PHP的openssl擴展 openssl擴展使用openssl加密擴展包,封裝了多個用于加密解密相關的PHP函數,極大地方便了對數據的加密解密。 常用的函數有: 對稱加密相關: string openssl_encrypt ( string $data , string $method , string $password) 其中$data為其要加密的數據,$method是加密要使用的方法,$password是要使用的密匙,函數返回加密后的數據; 其中$method列表可以使用openssl_get_cipher_methods()來獲取 其解密函數為 string openssl_encrypt ( string $data , string $method , string $password) 非對稱加密相關: 它們都只需要傳入證書文件(一般是.pem文件); 使用公匙加密數據,其中$data是要加密的數據;$crypted是一個引用變量,加密后的數據會被放入這個變量中;$key是要傳入的公匙數據; 由于被加密數據分組時,有可能不會正好為加密位數bit的整數倍,所以需要$padding(填充補齊), $padding的可選項有 OPENSSL_PKCS1_PADDING, OPENSSL_NO_PADDING,分別為PKCS1填充,或不使用填充; 簽名函數:$data為要簽名的數據;$signature為簽名結果的引用變量;$priv_key_id為簽名所使用的私匙;$signature_alg為簽名要使用的算法 ,其算法列表可以使用openssl_get_md_methods()得到 驗簽函數:與簽名函數相對,只不過它要傳入與私匙對應的公匙;其結果為簽名驗證結果,1為成功,0為失敗,-1則表示錯誤; * */ /* * 基于百度云API的例子 * 密碼一律采用AES 128位加密算法進行加密,用SK的前16位作為密鑰, * 加密后生成的二進制字節流需要轉成十六進制,并以字符串的形式傳到服務端 * */ function aes128WithFirst16Char($adminPass, $secretAccessKey) { $adminPass = pkcs5Pad($adminPass); //把key值截取成16位的 $secretAccessKey = substr($secretAccessKey, 0, 16); //進行AES加密 $crypted = openssl_encrypt($adminPass, 'AES-128-ECB', $secretAccessKey, OPENSSL_RAW_DATA); //把字符串轉換為16進制 return bin2hex(substr($crypted, 0, 16)); } //把密碼填充成16位 function pkcs5Pad($adminPass) { $pad = 16 - (strlen($adminPass) % 16); return $adminPass . str_repeat(chr($pad), $pad); } echo aes128WithFirst16Char('加密的密碼','key值');
關于如何在PHP中實現一個AES 128位加密算法問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。