本文將詳細闡述如何利用PHP實現與Java代碼等效的AES加解密效果。我們將分析Java代碼的AES算法實現,并提供相應的PHP代碼,確保兩者在加密和解密結果上保持一致。 這需要選擇合適的PHP函數庫,并正確處理密鑰和初始化向量(IV)。
Java代碼通常使用128位密鑰,并利用SecureRandom生成密鑰。PHP中沒有完全等同的密鑰生成方法,但我們可以使用openssl_random_pseudo_bytes()函數生成隨機IV,并使用預定義密鑰。需要注意的是,Java密鑰生成可能使用特定種子字符串,而PHP代碼中密鑰通常直接使用預定義字符串。 兩者通常采用AES-128-CBC模式,此模式需要IV以保證安全性。
以下為PHP實現的AES加解密代碼:
立即學習“PHP免費學習筆記(深入)”;
<?php class AESUtil { private static $key = "test"; // 默認密鑰 /** * AES加密 * @param string $content 待加密數據 * @param string|null $key 密鑰,為空則使用默認密鑰 * @return string 十六進制加密結果 */ public static function encrypt(string $content, string $key = null): string { $key = $key ?? self::$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 bin2hex($iv . $encrypted); } /** * AES解密 * @param string $content 十六進制加密數據 * @param string|null $key 密鑰,為空則使用默認密鑰 * @return string 解密結果 */ public static function decrypt(string $content, string $key = null): string { $key = $key ?? self::$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); } } // 示例 $plaintext = "Hello, World!"; $encrypted = AESUtil::encrypt($plaintext); $decrypted = AESUtil::decrypt($encrypted); echo "原文: " . $plaintext . PHP_EOL; echo "加密后: " . $encrypted . PHP_EOL; echo "解密后: " . $decrypted . PHP_EOL; ?>
這段PHP代碼使用openssl_encrypt和openssl_decrypt函數實現AES-128-CBC加密和解密。它也接受密鑰參數,并生成隨機IV以確保安全性。 與Java代碼不同的是,PHP代碼將加密結果轉換為十六進制字符串輸出,以便與Java輸出格式保持一致。 實際應用中,應根據具體需求選擇合適的密鑰長度和加密模式,并注意密鑰管理的安全。 記住,“test” 只是一個示例密鑰,絕不能在生產環境中使用。 應該使用更安全、更隨機的密鑰生成方法。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END