java - 如何在 Android 上从 Facebook 解密数据?AES/GCM
问题描述
新的更新后,Facebook 会加密活动数据,这些数据可以通过 InstallRefer 获得。如何在 Android 上解密这些数据?我无法弄清楚我做错了什么?
int TAG_LENGTH = 16;
String decrypted_text;
Cipher cipher = null;
byte[] decodeData;
String decode_key = "1979b253b2672502d14193769a157fa7fe909c44386ed03019804d8e8e6d6894";
String s = "a465493b52a7eb721cf7eafdd16fddbe66431b6c266f1a357ff1c0f6910717ca5ed66440021588436001c13f562f906e78401498a3bbde775cb603cf16bff228fa2ddc1145b64dcd581a2703892ed78da4f36fae9aa7b3824a277b6df0847215056862f2975c79bb3e23471dcf361d53f652d4edb41d6e30f8ab94615742e88706b3a3f337f6c0e52e511ff7ed336d4baa23351552f1b6eb168765880382ff6788113414ba51d28f50897cb74ad81cd4adc0c0073c960791e2be172f2bc11adbfb3bb4b1cb2dfd7b7554f9f404337504d9e1f21e1a68191243ede10bfdc63a4a0aafd0322147efba9e9c269188ebaf5f297ba89f23a8dc66ee9a0b59c13caccf4518032a6d27ea0949cd3fd2f09f4551ef58b4aaf8c6981feac1ab2df686d7bde30be0e5cf1d259424e3268b3e222deef951bd43b688fd9d18266f084df972781d7318eccdda5e31643446de7e460b03c05c2d91682f9aaca8074416a5fd6b221afc6dbd61ccd2f549a2a8844783d2616ff75037478706c300d4e9944f623022b377bfd5bb2fcdac86e9a58dbeadca5dc5a746c839dd38c66fd6abb3de8a3bca0a4e4b416c1fd1e7c13799317e924ddde1f88cae0d5598be1d76ccb9931266cad07cd7a72df756830cdbadb95bed5c505535c62d87adcdf82338c29a0cc82b56bc9fe60d01af4de65e189d4b4ddc2c4cb755ba4e17f4261b72d14a";
byte[] keyBytes = new byte[0];
byte[] salt = new byte[8];
KeySpec spec = new PBEKeySpec(decode_key.toCharArray(), salt, 65536, 128);
SecretKeyFactory f = null;
try {
f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
try {
keyBytes = f.generateSecret(spec).getEncoded();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
}
SecretKey secretKey = new SecretKeySpec(keyBytes, "AES_256");
byte[] byte_data = Base64.decode(s, Base64.DEFAULT);
try {
Log.d(TAG, " try {");
cipher = Cipher.getInstance("AES/GCM/NoPadding");
GCMParameterSpec spec1 = new GCMParameterSpec(16 * 8,cipher.getIV());
GCMParameterSpec(256, byte_data, 0, 12);
Log.d(TAG, " cipher.init(");
cipher.init(Cipher.DECRYPT_MODE, secretKey,spec1);
decodeData = cipher.doFinal(byte_data, 16 , byte_data.length - 16);
Log.d(TAG, " decodeData");
decrypted_text = new String(decodeData, "UTF-8");
Log.d(TAG,decrypted_text);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
}
我正在将密钥和文本解码为字节数组。然后我将 SecretKey 与 AES_256 一起使用。我不知道 GCMParameterSpe 参数应该是哪一个?如果 TAG = 16,如何正确编写 cipher.doFinal()
解决方案
推荐阅读
- c#-4.0 - C#如何在ListView_ItemDataBound的相同标签中获取先前的值?
- c++ - 左值对象使用带有右值引用的转换构造函数成功地从函数返回
- c++ - 下面给出的是 Cp3 书中的 c++ 代码。我无法理解这一行:-scanf("0.%[0-9]...\n", &x);
- google-sheets-api - 工作表/密钥/公共/完整服务需要从 30.04.2019 开始的 NID cookie
- rust - 为什么没有发生借用重叠时会出现借用错误?
- python - 无法将数据写入 RDD
- c# - 需要将多个文本框的 TextBox_LostFocus 的重复代码缩减为一个函数
- php - 无法在 laravel 5.8 中安装集合
- c# - WPF Canvas 不呈现绑定到 ItemsControl 的形状
- spring-boot - 如何在 Spring Boot 中使用 jacoco maven 插件将空手道测试代码覆盖率纳入 SonarQube?