1

我想加密音频文件;我如何在 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 模式下加密后原始文件大小变小了。而且解密后,它的大小与加密后的大小相同。

4

2 回答 2

1

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

关于如何在您的应用程序中使用 CommonCrypto有几个问题。

于 2012-01-17T13:42:18.003 回答
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];
}

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

于 2012-01-25T07:52:40.210 回答