2012-01-17 149 views
1

我想加密音频文件,我如何在iPhone中实现它。 有没有任何框架来完成这件事。加密Iphone中的音频文件

这是我使用加密文件的代码,

NSData *inputData = [NSData dataWithContentsOfFile:localfilePath.path]; 

NSString *encryptKey=[NSString stringWithString:@"nywleS"]; 





    CCCryptorStatus status = kCCSuccess; 
        NSData *encrypted = [inputData dataEncryptedUsingAlgorithm:kCCAlgorithmAES128 key:encryptKey initializationVector:@"Selwyn" options:0 error:&status]; 


NSData *decryptedData = [outputData decryptedAES256DataUsingKey:encryptKey error:nil]; 

但原始文件的大小成为CBS模式加密后少。 并且在解密之后它与加密的尺寸相同。 请帮我解决这个问题。

感谢,

+0

请记住,任何确定的人仍然可以获取您的音频文件,这主要是为了防止用户在与iTunes同步后随意将其复制出.ipa。也就是说,使用简单的XOR或仿射密码,您可能会获得相同的结果。 (如果AES路由结果没有足够的性能) – iccir 2012-01-25 07:42:39

+0

你是否有任何示例代码为执行的参考,我可以查看 – Selwyn 2012-01-25 07:45:00

+0

添加为答案,请不要接受 - 虽然它不回答你的原来的问题;) – iccir 2012-01-25 07:53:11

回答

1

IOS支持CommonCrypto(就像Mac OSX版一样)。这将允许您加密和解密任何类型的数据,包括音频。

关于如何在您的应用程序中使用CommonCrypto,有几个questions

+0

可以请你给我发一个加密示例代码使用AES加密和解密。 – Selwyn 2012-01-18 04:36:33

+0

@Selwyn Apple提供了一个示例http://developer.apple.com/library/ios/#samplecode/CryptoExercise/Introduction/Intro.html – poupou 2012-01-18 12:57:58

+0

我使用常见的加密,但我想在CBC模式下工作我无法选择cbc模式。 – Selwyn 2012-01-25 07:39:10

0

poupou的答案应该最终得到信任,因为他正在回答原来的问题。我张贴此作为一个答案,因为参考代码在上面留言问我:

Obfuscate/Encrypt a String,修改的NSData:

- (NSData *)obfuscate:(NSData *)data withKey:(NSString *)key 
{ 
    NSData *result = [data mutableCopy]; 

    // Get pointer to data to obfuscate 
    char *dataPtr = (char *) [result mutableBytes]; 

    // Get pointer to key data 
    char *keyData = (char *) [[key dataUsingEncoding:NSUTF8StringEncoding] bytes]; 

    // Points to each char in sequence in the key 
    char *keyPtr = keyData; 
    int keyIndex = 0; 

    // For each character in data, xor with current value in key 
    for (int x = 0; x < [data length]; x++) 
    { 
    // Replace current character in data with 
    // current character xor'd with current key value. 
    // Bump each pointer to the next character 
    *dataPtr = *dataPtr++^*keyPtr++; 

    // If at end of key data, reset count and 
    // set key pointer back to start of key value 
    if (++keyIndex == [key length]) 
     keyIndex = 0, keyPtr = keyData; 
    } 

    return [result autorelease]; 
} 

再次,这是为了防止音频文件的随意复制(正如我的评论所述),而不是一种安全的端到端加密技术。