Java DES加密與PHP解密互通:如何解決編碼差異?

Java des加密與php解密互通:巧妙解決編碼差異

Java與PHP環(huán)境下DES加密解密互通,需要精確匹配密鑰和編碼方式,才能保證數(shù)據(jù)安全完整。本文將詳細講解如何實現(xiàn)Java DES加密字符串在PHP環(huán)境下的正確解密。

Java端采用secureutil.des(“加解密key”.getBytes())方法進行DES加密,未啟用初始向量(IV),即DES-ECB模式。此模式簡潔但安全性較低,因為相同明文加密結(jié)果相同。

Java加密流程:使用密鑰“加解密key”初始化DES加密對象,調(diào)用des.encryptHex(“待加密內(nèi)容”)方法加密字符串,返回十六進制密文。然而,原始Java代碼片段不完整,缺少將加密結(jié)果轉(zhuǎn)換為PHP可處理格式的關(guān)鍵步驟。PHP的openssl_decrypt函數(shù)通常需要Base64編碼的密文。因此,Java端需將加密后的字節(jié)數(shù)組Base64編碼。

完整的Java加密示例,包含Base64編碼:

立即學(xué)習(xí)PHP免費學(xué)習(xí)筆記(深入)”;

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.getEncoder().encodeToString(encrypt); System.out.println(encode);

此代碼使用Base64.getEncoder().encodeToString方法將加密字節(jié)數(shù)組轉(zhuǎn)換為Base64編碼字符串,輸出為Base64編碼密文。

對應(yīng)的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代碼使用openssl_decrypt函數(shù),指定DES-ECB模式和密鑰“sg202303”,對Base64解碼后的密文進行解密,輸出解密結(jié)果。 請注意:openssl_decrypt函數(shù)需要Base64編碼的密文。Java端需Base64編碼,PHP端需Base64解碼(代碼中雖然未顯式解碼,但openssl_decrypt會自動處理Base64編碼字符串)。 Java端未進行Base64編碼,PHP解密將失敗。 密鑰必須與Java端加密密鑰完全一致。

Java DES加密與PHP解密互通:如何解決編碼差異?

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊9 分享