Objective-c:读取在Windows上加密的文件

时间:2012-02-05 19:46:42

标签: objective-c delphi encryption

我正在使用Objective-C开发OSX应用程序,我需要做的一件事是读取使用简单的位移算法在Windows机器上加密的text / xml文件。在Delphi中,Windows端的加密代码非常简单:

const
  EncryptKey : word = ????;
var
  InMS  : TMemoryStream;
  cnt   : Integer;
  c     : byte;
begin
  InMS    := TMemoryStream.Create;
  result  := TMemoryStream.Create;
  try
    InMS.LoadFromFile( FileName );
    InMS.Position := 0;
    for cnt := 0 to InMS.Size - 1 do
      begin
      InMS.Read( c, 1 );
      c := ( c xor not ( ord( EncryptKey shr cnt ) ) );
      result.Write( c, 1 );
      end;
  finally
    InMS.Free;
  end;
end;

问题是我无法弄清楚如何在Mac端正确读取和解密它。我尝试了各种使用NSData的方法,但没有任何成功。

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:1)

这可能对你有帮助(简单的xor加密):

-(void) decryptData :(NSMutableData *) data{
    unsigned char *bytes = (unsigned char *)malloc([data length]); 
    unsigned char magic[4] = {(currentCipher >> 24) & 0xff,(currentCipher >> 16) & 0xff,(currentCipher >> 8) & 0xff,(currentCipher) & 0xff};
    [data getBytes:bytes];
    int magic_pointer = 0;
    for (int i = 16; i < [data length]; i++) {
        bytes[i] ^= magic[magic_pointer];        
        if (magic_pointer == 3) magic_pointer = 0; else magic_pointer++;
    }
    free(bytes);
    [data setData:[NSMutableData dataWithBytes : bytes length: [data length] ]];
}

这里: currentCipher是你的EcrytpKey,^ xor。在C中右移也是>>,而不是运算符是!