PHP + Android XML加密/解密

我有一个应用程序正在下载并解析xml到SQL数据库。 我的问题是,一旦部署了应用程序,xml中的数据很容易被删除,其他人可能会将我辛苦赚来的数据用于他们自己的邪恶目的/应用程序。 基本上我需要使用php加密xml,然后使用android解密它。 我已经看到了几个易于加密的php类,但我不完全确定加密的哪种方法与android兼容。

解决后编辑:

起初我认为由于某种原因我不得不忽略括号,并且将遍历所有文本并吐出格式化的xml lol。 比那简单得多。

$mcrypt = new MCrypt(); $datainxml = file_get_contents("data.xml"); $cipher = $mcrypt->encrypt($value); echo $cipher; 

以下代码可能对您有所帮助。 使用此function,您可以在PHP和Android之间加密/解密字符串。

Java部分:

 import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class MCrypt { private String iv = "fedcba9876543210";//Dummy iv (CHANGE IT!) private IvParameterSpec ivspec; private SecretKeySpec keyspec; private Cipher cipher; private String SecretKey = "0123456789abcdef";//Dummy secretKey (CHANGE IT!) public MCrypt() { ivspec = new IvParameterSpec(iv.getBytes()); keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES"); try { cipher = Cipher.getInstance("AES/CBC/NoPadding"); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public byte[] encrypt(String text) throws Exception { if(text == null || text.length() == 0) throw new Exception("Empty string"); byte[] encrypted = null; try { cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); encrypted = cipher.doFinal(padString(text).getBytes()); } catch (Exception e) { throw new Exception("[encrypt] " + e.getMessage()); } return encrypted; } public byte[] decrypt(String code) throws Exception { if(code == null || code.length() == 0) throw new Exception("Empty string"); byte[] decrypted = null; try { cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); decrypted = cipher.doFinal(hexToBytes(code)); } catch (Exception e) { throw new Exception("[decrypt] " + e.getMessage()); } return decrypted; } public static String bytesToHex(byte[] data) { if (data==null) { return null; } int len = data.length; String str = ""; for (int i=0; i 

PHP部分:

 hex2bin($key); $iv = $this->iv; $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv); mcrypt_generic_init($td, $this->key, $iv); $encrypted = mcrypt_generic($td, $str); mcrypt_generic_deinit($td); mcrypt_module_close($td); return bin2hex($encrypted); } function decrypt($code) { //$key = $this->hex2bin($key); $code = $this->hex2bin($code); $iv = $this->iv; $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv); mcrypt_generic_init($td, $this->key, $iv); $decrypted = mdecrypt_generic($td, $code); mcrypt_generic_deinit($td); mcrypt_module_close($td); return utf8_encode(trim($decrypted)); } protected function hex2bin($hexdata) { $bindata = ''; for ($i = 0; $i < strlen($hexdata); $i += 2) { $bindata .= chr(hexdec(substr($hexdata, $i, 2))); } return $bindata; } } 

用法(Java):

 mcrypt = new MCrypt(); /* Encrypt */ String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("Text to Encrypt") ); /* Decrypt */ String decrypted = new String( mcrypt.decrypt( encrypted ) ); 

用法(PHP):

 $mcrypt = new MCrypt(); #Encrypt $encrypted = $mcrypt->encrypt("Text to encrypt"); #Decrypt $decrypted = $mcrypt->decrypt($encrypted);