3

我需要将一些 json 数据从 php 服务器端点传输到我的 Android 客户端,但是如果端点暴露,我想保护对数据的明显读取。所以我打算在 php 端点中编写一些简单的字符串加密函数,并让我的客户端解密它。有没有现成的图书馆可以这样做?

4

2 回答 2

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/

于 2013-08-31T05:42:35.380 回答
0

我认为您最好使用 SSL / HTTPS。这将加密您的数据,并且它将保护客户端免受有人可能创建假服务器来拦截流量的可能性。

好处是 SSL 更易于实现。您只需要一个 SSL 证书。

于 2013-08-31T05:43:22.717 回答