我有一个加密的 MP3 文件。该文件使用以下 openssl 方法加密
openssl enc -e -aes-128-cbc -K 00ff349830193845af43984758690213 -p -iv 0 -nosalt -in input.mp3 -out output.mp3
然后我尝试在我的 ios 应用程序中解密文件,如下所示,
NSString *resourceDocPath = [[NSString alloc] initWithString:[[NSBundle mainBundle] bundlePath]] ;
NSString *filePath = [resourceDocPath stringByAppendingPathComponent"output.mp3"];
NSData *key = [@"00ff349830193845af43984758690213" dataUsingEncoding:NSUTF8StringEncoding];
NSData *iv = [@"00000000000000000000000000000000" dataUsingEncoding:NSUTF8StringEncoding];
NSData *fileData = [[NSData alloc] initWithContentsOfFile:filePath];
NSData *decryptData;
CCCryptorStatus ccStatus = kCCSuccess;
size_t cryptBytes = 0; // Number of bytes moved to buffer.
NSMutableData *dataOut = [NSMutableData dataWithLength:fileData.length + kCCBlockSizeAES128];
ccStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmAES128,
kSecPaddingNone,
key.bytes,
kCCKeySizeAES128,
iv.bytes,
fileData.bytes,
fileData.length,
dataOut.mutableBytes,
dataOut.length,
&cryptBytes);
if (ccStatus != kCCSuccess) {
NSLog(@"CCCrypt status: %d", ccStatus);
}
dataOut.length = cryptBytes;
decryptData = dataOut;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent"MyDECFile.mp3"];
[decrypt writeToFile:appFile atomically:YES];
NSLog(@"%@",documentsDirectory);
现在我在文档目录中有解密的 MP3 文件,但它没有播放,实际上它是一个垃圾输出。请建议我一种获得所需输出的方法。
Best Answer-推荐答案 strong>
我用过https://github.com/rnapier/RNCryptor用于解密。
#import "ViewController.h"
#import <Security/Security.h>
#import <MediaPlayer/MediaPlayer.h>
#import "RNEncryptor.h"
#import "RNDecryptor.h"
#import "RNOpenSSLEncryptor.h"
#import "RNOpenSSLDecryptor.h"
NSString *resourceDocPath = [[NSString alloc] initWithString:[[NSBundle mainBundle] bundlePath]] ;
NSString *filePath1 = [resourceDocPath stringByAppendingPathComponent"output.mp3"]; //The encrypted mp3 file (with aPassword)
NSData *passEncryptedData =[[NSData alloc] initWithContentsOfFile:filePath1];
NSError *error;
NSString *pass = @"aPassword";
NSData *dataDecrypted = [RNOpenSSLDecryptor decryptData:passEncryptedData
withSettings:kRNCryptorAES256Settings
password:pass
error:&error];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent"passDecryptFile.mp3"]; //The Decrypted file saved here
[dataDecrypted writeToFile:appFile atomically:YES];
NSLog(@"%@",documentsDirectory);
关于ios - 在 iOS 中使用 commoncrypto 解密 mp3 文件(mp3 文件使用 openssl 加密),我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/12670914/
|