Android与服务器之间加密

为了确保Android与服务器之间传输的数据安全,一种常见的方法是使用加密技术。以下是一些常用的加密方法:

  1. SSL/TLS:这是一种基于公共密钥加密的协议,它可以确保数据在传输过程中不被篡改或窃听。SSL/TLS通常用于HTTPS协议,即在HTTP的基础上添加了SSL/TLS加密功能。

  2. 对称加密:这是一种加密技术,其中发送方和接收方使用同一个密钥来加密和解密数据。对称加密的好处是速度较快,但需要确保同一密钥只能被双方共享。

  3. 非对称加密:这是一种加密技术,其中有两个密钥:公钥和私钥。发送方使用接收方的公钥进行加密,并将其发送给接收方,接收方使用自己的私钥进行解密。非对称加密的好处是加密过程安全,但速度较慢。

使用SSL/TLS协议进行数据传输,并且用AES加密数据,并使用RSA公钥进行加密、私钥进行解密

private class DecryptTask extends AsyncTask {
    private final String TAG = "DecryptTask";

    @Override
    protected String doInBackground(String... params) {
        String result = null;
        try {
            // 1. 建立SSL连接
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, null, null);
            SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
            URL url = new URL("https://example.com/api/decrypt");
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setSSLSocketFactory(sslSocketFactory);

            // 2. 加密数据
            String plaintext = params[0];
            byte[] aesKey = generateAESKey();
            byte[] ciphertext = encryptAES(plaintext.getBytes("UTF-8"), aesKey);
            byte[] encryptedAesKey = encryptRSA(aesKey, getResources().openRawResource(R.raw.public_key));

            // 3. 发送加密数据
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/octet-stream");
            conn.setDoOutput(true);
            conn.connect();
            OutputStream os = conn.getOutputStream();
            os.write(encryptedAesKey);
            os.write(ciphertext);
            os.close();

            // 4. 接收返回的解密数据
            int responseCode = conn.getResponseCode();
            if (responseCode == HttpsURLConnection.HTTP_OK) {
                InputStream is = conn.getInputStream();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len;
                while ((len = is.read(buffer)) != -1) {
                    baos.write(buffer, 0, len);
                }
                is.close();
                baos.close();
                result = new String(baos.toByteArray(), "UTF-8");
            } else {
                Log.e(TAG, "Response code: " + responseCode);
            }
            conn.disconnect();
        } catch (Exception e) {
            Log.e(TAG, e.getMessage(), e);
        }
        return result;
    }

    @Override
    protected void onPostExecute(String result) {
        if (result != null) {
            // 显示解密后的结果
            Log.i(TAG, "Result: " + result);
        }
    }
}
 

你可能感兴趣的:(安全,https,ssl)