本文深入探討Java DES加密算法與PHP解密的兼容性問題。 示例Java代碼使用自定義SecureUtil類和DES算法(ECB模式,無初始化向量),安全性較低,僅供學習參考,不建議用于生產環境。
Java端加密流程:使用密鑰“sg202303”初始化DES對象,調用SecureUtil.des(key.getBytes(StandardCharsets.UTF_8)).encrypt(value)加密字符串,再用Base64.encode編碼輸出。
Java加密代碼示例:
final String key = "sg202303"; final String value = "> 本文參與了[segmentfault 思否面試闖關挑戰賽],歡迎正在閱讀的你也加入。"; final byte[] encrypt = SecureUtil.des(key.getBytes(StandardCharsets.UTF_8)).encrypt(value); final String encode = Base64.encode(encrypt); System.out.println(encode);
對應的PHP解密代碼:
立即學習“PHP免費學習筆記(深入)”;
$xxx = 'P+fEE0NngTu8Ak1E78zGGds3ozPA+M6h1u8v/FMih/Wi1k3YM/q+In+3wUgTv1XGhViBxCRYpqofV5ih0BN+vZTf2fnT4VbH59eRTAQoyl+4ePrKtVf1FngTbcBAT3CHNaYVUIXMbsAUpLwpcgMhJlqM6k4qbzqnEndrIMCzkkyk413alLIUy2/Fo97PvGdR'; $method = 'DES-ECB'; $key = 'sg202303'; var_dump(openssl_decrypt(base64_decode($xxx), $method, $key));
PHP代碼使用base64_decode解碼密文,再用openssl_decrypt函數(指定DES-ECB模式和密鑰“sg202303”)解密。 openssl_decrypt返回解密后的明文。
需要注意的是,Java的SecureUtil類和PHP的openssl_decrypt函數實現細節可能存在差異。 解密失敗可能由密鑰不一致或Java端加密過程使用了填充模式導致。
強烈建議: 由于DES算法和ECB模式安全性低,實際應用中應選擇更安全的加密算法和模式,例如AES-CBC或AES-GCM。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END