PHP與Java AES加密解密如何實(shí)現(xiàn)相同效果?

PHP與Java AES加密解密如何實(shí)現(xiàn)相同效果?

phpJava AES加密解密等效實(shí)現(xiàn)

本文闡述如何利用PHP代碼實(shí)現(xiàn)與Java代碼相同的AES加密解密效果。Java代碼采用AES算法,并指定密鑰和模式進(jìn)行加解密。為了在PHP中復(fù)現(xiàn)相同功能,我們需要選擇合適的PHP函數(shù)模擬Java代碼的行為。

Java代碼的加密過(guò)程包含密鑰生成、加密模式選擇以及最終的十六進(jìn)制轉(zhuǎn)換;解密過(guò)程則反向操作,先將十六進(jìn)制字符串還原為字節(jié)數(shù)組,再進(jìn)行解密。PHP沒(méi)有完全等效的密鑰生成方法,但openssl_encrypt和openssl_decrypt函數(shù)可實(shí)現(xiàn)AES加解密。

以下為PHP代碼實(shí)現(xiàn):

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

class AESUtil {     private static $key = "test"; // 默認(rèn)密鑰      /**      * 加密函數(shù)      * @param string $content 要加密的數(shù)據(jù)      * @param string|null $key 加密密鑰,未指定則使用默認(rèn)密鑰      * @return string 加密后的十六進(jìn)制字符串      */     public static function encrypt($content, $key = null) {         $key = is_null($key) ? self::$key : $key;         $iv_size = openssl_cipher_iv_length('AES-128-CBC');         $iv = openssl_random_pseudo_bytes($iv_size);         $encrypted = openssl_encrypt($content, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);         return strtoupper(bin2hex($iv . $encrypted));     }      /**      * 解密函數(shù)      * @param string $content 要解密的數(shù)據(jù)(十六進(jìn)制字符串)      * @param string|null $key 解密密鑰,未指定則使用默認(rèn)密鑰      * @return string 解密后的數(shù)據(jù)      */     public static function decrypt($content, $key = null) {         $key = is_null($key) ? self::$key : $key;         $data = hex2bin($content);         $iv_size = openssl_cipher_iv_length('AES-128-CBC');         $iv = substr($data, 0, $iv_size);         $encrypted = substr($data, $iv_size);         return openssl_decrypt($encrypted, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);     } }  // 使用示例 $原文 = "Hello, World!"; $加密文本 = AESUtil::encrypt($原文); $解密文本 = AESUtil::decrypt($加密文本);  echo "原文: " . $原文 . PHP_EOL; echo "加密后: " . $加密文本 . PHP_EOL; echo "解密后: " . $解密文本 . PHP_EOL;

此PHP代碼使用openssl_encrypt和openssl_decrypt函數(shù),并指定AES-128-CBC模式。它生成隨機(jī)初始化向量(IV),并將其與加密數(shù)據(jù)一起存儲(chǔ)和傳輸,以提高安全性。加密結(jié)果以十六進(jìn)制字符串輸出,解密前需轉(zhuǎn)換為二進(jìn)制數(shù)據(jù),與Java代碼的十六進(jìn)制表示方式對(duì)應(yīng)。 PHP代碼中的密鑰處理方式與Java略有不同,但最終加解密效果一致。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享