安卓开发中 网络请求可能被篡改如何处理(如订单金额)用代码该如何实现
时间: 2024-03-11 12:51:10 浏览: 48
原生代码实现网络请求
5星 · 资源好评率100%
在安卓开发中,可以通过在客户端对数据进行加密和签名来防止网络请求的篡改。以下是一个示例代码,仅供参考:
1. 对数据进行加密
```java
// 加密数据
public static String encryptData(String data, String key) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] encrypted = cipher.doFinal(data.getBytes("UTF-8"));
return Base64.encodeToString(encrypted, Base64.DEFAULT);
}
// 解密数据
public static String decryptData(String encryptedData, String key) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] decrypted = cipher.doFinal(Base64.decode(encryptedData, Base64.DEFAULT));
return new String(decrypted, "UTF-8");
}
```
2. 对数据进行签名
```java
// 对数据进行签名
public static String signData(String data, String key) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(secretKeySpec);
byte[] signature = mac.doFinal(data.getBytes("UTF-8"));
return Base64.encodeToString(signature, Base64.DEFAULT);
}
// 校验签名
public static boolean verifySignature(String data, String signature, String key) throws Exception {
String computedSignature = signData(data, key);
return computedSignature.equals(signature);
}
```
在请求数据时,可以先对数据进行加密和签名,然后将加密后的数据和签名一起放在请求参数中发送到服务器。服务器在接收到请求后,可以先校验签名,然后再对数据进行解密和处理。这样可以有效防止网络请求的篡改和数据泄露。
阅读全文