PHP與Java都是非常流行的編程語言,它們在很多領域中都被廣泛使用。而在安全領域中,加密算法則是非常重要的一部分內容。本文將重點探討PHP中常用的AES加密解密算法和如何在Java中解密AES加密的數據。
AES算法是一種對稱密鑰加密算法,對于傳輸的數據進行加密后,只有持有密鑰的用戶才能解密數據。在PHP中,我們可以使用openssl_encrypt()和openssl_decrypt()兩個函數進行加密和解密,其中需要傳入參數包括加密算法類型、加密算法模式、密鑰和初始向量等信息。
//加密函數 function encrypt($data, $key){ $cipher = "aes-128-cbc"; $ivlen = openssl_cipher_iv_length($cipher); $iv = openssl_random_pseudo_bytes($ivlen); $ciphertext = openssl_encrypt($data, $cipher, $key, OPENSSL_RAW_DATA, $iv); return base64_encode($iv.$ciphertext); } //解密函數 function decrypt($data, $key){ $cipher = "aes-128-cbc"; $ivlen = openssl_cipher_iv_length($cipher); $ciphertext = base64_decode($data); $iv = substr($ciphertext, 0, $ivlen); $ciphertext = substr($ciphertext, $ivlen); $plaintext = openssl_decrypt($ciphertext, $cipher, $key, OPENSSL_RAW_DATA, $iv); return $plaintext; }
在Java中,我們需要導入Java Cryptography Extension (JCE) Policy Files,以便支持AES加密算法。我們可以使用javax.crypto包中的Cipher類進行解密,其中需要傳入參數包括加密算法類型、加密算法模式和密鑰等信息。需要注意的是,密鑰需要使用Base64解碼后再使用。
//解密函數 private static String decrypt(String key, String encrypted) throws Exception { byte[] keyBytes = Base64.getDecoder().decode(key.getBytes()); byte[] iv = Arrays.copyOf(encrypted.getBytes(), 16); byte[] encryptedBytes = Arrays.copyOfRange(encrypted.getBytes(), 16, encrypted.getBytes().length); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(iv)); byte[] decryptedBytes = cipher.doFinal(encryptedBytes); return new String(decryptedBytes); }
總之,使用AES算法進行加密解密是一種非常常用的加密算法。PHP和Java中各有對應的實現方式,在使用時需要注意參數的傳遞方式及格式轉換等問題。
上一篇ajax 如何傳數組參數
下一篇java平臺包含和兩部分