Android和Google App Engine之间的公钥加密

时间:2014-03-20 00:18:59

标签: android google-app-engine

是否有一些样板代码或库可以在Android应用和Google App Engine(Java)之间实现公钥/私钥加密?我想使用公钥加密Android应用中的消息,将其提交给GAE,并让GAE使用相应的私钥解密消息。

2 个答案:

答案 0 :(得分:2)

只需启用HTTPS,它就会向Android设备发送Google公钥以加密随机客户端会话密钥,并使用AppEngine服务器中的Google私钥自动解密该会话密钥,然后双向传输使用会话密钥加密的邮件。会话密钥使用的带宽少于使用公钥和私钥加密和解密整个消息的带宽。

答案 1 :(得分:0)

以下是在Android上进行公钥加密的一个示例

public static byte[] encrypt(String publicKey, String data) {
        if (TextUtils.isEmpty(publicKey) || TextUtils.isEmpty(data)) {
            return null;
        }
        try {
            // Decode the modified public key into a byte[]
            byte[] publicKeyByteArray = Base64.decode(publicKey.getBytes("UTF-8"),Base64.NO_WRAP);

            Cipher mCipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(publicKeyByteArray);
            Key key = keyFactory.generatePublic(x509KeySpec);
            mCipher.init(Cipher.ENCRYPT_MODE, key);
            return mCipher.doFinal(data.getBytes("UTF-8"));
        }
        catch (UnsupportedEncodingException e) {
            Log.e("RSAKEY", e.getMessage());
        }
        catch (NoSuchPaddingException e) {
            Log.e("RSAKEY", e.getMessage());
        } catch (NoSuchAlgorithmException e) {
            Log.e("RSAKEY", e.getMessage());
        } catch (InvalidKeyException e) {
            Log.e("RSAKEY", e.getMessage());
        } catch (InvalidKeySpecException e) {
            Log.e("RSAKEY", e.getMessage());
        } catch (IllegalBlockSizeException e) {
            Log.e("RSAKEY", e.getMessage());
        } catch (BadPaddingException e) {
            Log.e("RSAKEY", e.getMessage());
        }
        return null;
    }