如何在iOS中使用AES / CBC / PKCS5Padding标准解密xml文件,在android中文件已被解密,所有键如salt,IV

时间:2015-11-13 05:43:29

标签: ios encryption aes

      private static Cipher getCipher(int mode) throws Exception {
      Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");

      //a random Init. Vector. just for testing
      byte[] iv = "e675f725e675f725".getBytes("UTF-8");

      c.init(mode, generateKey(), new IvParameterSpec(iv));
      return c;
  }


  private static String Decrypt(String encrypted) throws Exception {

      byte[] decodedValue = new Base64().decode(encrypted.getBytes("UTF-8")); // new BASE64Decoder().decodeBuffer(encrypted);

      Cipher c = getCipher(Cipher.DECRYPT_MODE);
      byte[] decValue = c.doFinal(decodedValue);

      return new String(decValue);
  }

  private static Key generateKey() throws Exception {
      SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
      char[] password = "3x5FBNs!".toCharArray();
      byte[] salt = "S@1tS@1t".getBytes("UTF-8");

      KeySpec spec = new PBEKeySpec(password, salt, 65536, 128);
      SecretKey tmp = factory.generateSecret(spec);
      byte[] encoded = tmp.getEncoded();
      return new SecretKeySpec(encoded, "AES");
  }

我尝试使用RNCryptor但无法解密。任何人都可以帮助我使用哪个库,因为我有加密文件,不知道它是如何加密的。

1 个答案:

答案 0 :(得分:1)

为了使用RNCryptor,最好在两个平台上使用它。

从上一个问题来看,似乎加密数据是字节,而不是Base64编码。

Apple Common Crypto提供的原语是Security.framework的一部分。要使用的标头是#import <CommonCrypto/CommonCrypto.h>,您可以在CommonCryptor.hCommonKeyDerivation.h找到所需的接口。

尝试iOS并添加代码以及Android和iOS代码的所有输入和输出参数和数据的十六进制转储。