PHP如何實現與Java類似的AES加解密效果?

PHP如何實現與Java類似的AES加解密效果?

phpJava AES加解密實現詳解及代碼對比

本文將詳細闡述如何利用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
喜歡就支持一下吧
點贊6 分享