如何在iOS中使用AES/CBC/PKCS5P加密标准解密xml文件,在android中,该文件已经解密,所有密钥如salt、IV等

如何在iOS中使用AES/CBC/PKCS5P加密标准解密xml文件,在android中,该文件已经解密,所有密钥如salt、IV等,ios,encryption,aes,Ios,Encryption,Aes,我试图使用RNCryptor,但无法解密。有人能帮我使用哪个库吗?因为我得到了加密文件,但不知道它是如何加密的 为了使用RNCryptor,最好在两种平台上都使用它 从前面的问题来看,加密的数据似乎是字节,而不是Base64编码的 原语由Apple Common Crypto提供,是Security.framework的一部分。要使用的标题是#import,您可以在CommonCryptor.h和commonkeydrivation.h中找到所需的接口 尝试iOS并添加代码以及Android和i

我试图使用RNCryptor,但无法解密。有人能帮我使用哪个库吗?因为我得到了加密文件,但不知道它是如何加密的

为了使用RNCryptor,最好在两种平台上都使用它

从前面的问题来看,加密的数据似乎是字节,而不是Base64编码的

原语由Apple Common Crypto提供,是Security.framework的一部分。要使用的标题是
#import
,您可以在
CommonCryptor.h
commonkeydrivation.h
中找到所需的接口


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

我发现标准AES/CBC/PKCS5Padding在iOS中不支持,我是否必须使用AES/CBC/PKCS7Padding进行更新,或者使用相同的标准进行解密?PKCS5Padding和PKCS7Padding是同一算法的不同名称(好吧,几乎相同的算法,但我从未见过它们以不同的方式实现)。这是加密讨论中许多令人困惑的名称之一。谢谢@Rob,正如我读到的关于5和7中的填充是8和256字节的内容,所以我感到困惑。我已经有一个加密的xml文件,必须解密,我如何才能做到这一点。。。因为我是个新手。。。第一次从事加密工作。你能帮我吗,我也发了邮件寻求帮助。请注意,CBC模式是通用加密AES的默认模式。普通加密要求明确说明密钥大小,许多其他加密库使用提供的密钥长度作为密钥大小。我提供咨询服务,并乐于讨论速率,但编写自定义加密格式的iOS实现超出了我在StackOverflow上的能力。
      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");
  }