Ios 在C中解密aes-256-cbc openssl

Ios 在C中解密aes-256-cbc openssl,ios,c,encryption,commoncrypto,Ios,C,Encryption,Commoncrypto,我有一个使用以下openssl命令行加密的文件: openssl enc -aes-256-cbc -pass pass:somepassword -p -in inputfile.txt -out outputfile.enc 以下Java代码可以解密此罚款: byte[] encrypted = getBytesFromInputStream(in); String password = "somepassword"; Cipher c = Cipher.get

我有一个使用以下openssl命令行加密的文件:

openssl enc -aes-256-cbc -pass pass:somepassword -p -in inputfile.txt -out outputfile.enc
以下Java代码可以解密此罚款:

    byte[] encrypted = getBytesFromInputStream(in);

    String password = "somepassword";

    Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");

    // Openssl puts SALTED__ then the 8 byte salt at the start of the
    // file. We simply copy it out.
    byte[] salt = new byte[8];
    System.arraycopy(encrypted, 8, salt, 0, 8);
    SecretKeyFactory fact = SecretKeyFactory.getInstance("PBEWITHMD5AND256BITAES-CBC-OPENSSL", "BC");
    c.init(Cipher.DECRYPT_MODE, fact.generateSecret(new PBEKeySpec(password.toCharArray(), salt, 100)));

    // Decrypt the rest of the byte array (after stripping off the salt)
    byte[] data = c.doFinal(encrypted, 16, encrypted.length - 16);
它读取salt并从密码中派生IV,就像openssl命令行版本那样

您将如何使用C或ObjC在iOS上解密此文件?Commoncrypto是一个不错的选择,还是坚持使用openssl EVP api更好?我在这两个API中都找不到任何派生openssl密钥规范的函数,尽管该API必须在openssl中的某个地方,因为命令行实用程序正在使用它


我猜使用commoncrypto是首选的方式?有没有办法在commoncrypto中复制PBE密钥规范?

我的问题是文档。其中是从密码导出iv的OpenSSL文档。JAVA提供者BC的文档在哪里?PBE密钥规范不明确,这可能对应于公共加密中带有MD5的PBKDF2,但需要参数,输入、salt和重复计数。这是一个常见的问题,很少提供详细的文档来实现这些方法中的互操作性,这些方法将许多步骤合并为一个步骤。显然,openssl pbe密钥规范是“openssl是如何做到的”……请寻找EVP_BytesToKey,以找到openssl专有密钥派生的规范。