我需要将一些json数据从php服务器端点传输到我的Android客户端,但是如果端点暴露,我想保护明显的数据读取。所以我打算在php端点编写一些简单的字符串加密函数,并让我的客户端对其进行解密。有没有随手可得的图书馆这样做?
答案 0 :(得分:3)
使用mcrypt PHP模块进行加密
使用javax.crypto Java包进行解密
PHP中的加密:
function encrypt($message, $initialVector, $secretKey) {
return base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
md5($secretKey),
$message,
MCRYPT_MODE_CFB,
$initialVector
)
);
}
JAVA中的解密:
public static String md5(String input) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] messageDigest = md.digest(input.getBytes());
BigInteger number = new BigInteger(1, messageDigest);
return number.toString(16);
}
public String decrypt(String encryptedData, String initialVectorString, String secretKey) {
String decryptedData = null;
try {
SecretKeySpec skeySpec = new SecretKeySpec(md5(secretKey).getBytes(), "AES");
IvParameterSpec initialVector = new IvParameterSpec(initialVectorString.getBytes());
Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, initialVector);
byte[] encryptedByteArray = (new org.apache.commons.codec.binary.Base64()).decode(encryptedData.getBytes());
byte[] decryptedByteArray = cipher.doFinal(encryptedByteArray);
decryptedData = new String(decryptedByteArray, "UTF8");
} catch (Exception e) {
LOGGER.debug("Problem decrypting the data", e);
}
return decryptedData;
}
资源:http://www.logikdev.com/2010/11/01/encrypt-with-php-decrypt-with-java/
答案 1 :(得分:0)
我认为您最好使用SSL / HTTPS。这将加密您的数据,它将保护客户端免受有人可能创建虚假服务器以拦截流量的可能性。
好处是SSL更容易实现。您只需要一张SSL证书。