解密c

时间:2015-11-28 10:33:29

标签: 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.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并从openssl命令行版本中获取密码中的IV。

如何使用C或ObjC在iOS上解密此文件? Commoncrypto是一个不错的选择,还是坚持使用openssl EVP api更好?我在API中找不到任何用于派生openssl keyspec的函数,尽管在命令行实用程序使用它的时候,某些地方的API必须存在于openssl中。

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

0 个答案:

没有答案