本文深入探討Java DES加密算法與PHP解密的兼容性問題。 示例Java代碼使用自定義SecureUtil類和DES算法(ECB模式,無初始化向量),安全性較低,僅供學(xué)習(xí)參考,不建議用于生產(chǎn)環(huán)境。
Java端加密流程:使用密鑰“sg202303”初始化DES對象,調(diào)用SecureUtil.des(key.getBytes(StandardCharsets.UTF_8)).encrypt(value)加密字符串,再用Base64.encode編碼輸出。
Java加密代碼示例:
final String key = "sg202303"; final String value = "> 本文參與了[segmentfault 思否面試闖關(guān)挑戰(zhàn)賽],歡迎正在閱讀的你也加入。"; final byte[] encrypt = SecureUtil.des(key.getBytes(StandardCharsets.UTF_8)).encrypt(value); final String encode = Base64.encode(encrypt); System.out.println(encode);
對應(yīng)的PHP解密代碼:
立即學(xué)習(xí)“PHP免費學(xué)習(xí)筆記(深入)”;
$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函數(shù)(指定DES-ECB模式和密鑰“sg202303”)解密。 openssl_decrypt返回解密后的明文。
需要注意的是,Java的SecureUtil類和PHP的openssl_decrypt函數(shù)實現(xiàn)細節(jié)可能存在差異。 解密失敗可能由密鑰不一致或Java端加密過程使用了填充模式導(dǎo)致。
強烈建議: 由于DES算法和ECB模式安全性低,實際應(yīng)用中應(yīng)選擇更安全的加密算法和模式,例如AES-CBC或AES-GCM。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END