Objective-c: прочитать файл, зашифрованный в Windows - PullRequest
0 голосов
/ 05 февраля 2012

Я работаю над приложением OSX, использующим Objective-C, и одна из вещей, которые мне нужно сделать, - это читать текстовые / xml-файлы, которые были зашифрованы на компьютере Windows с использованием простого алгоритма битового сдвига. Код шифрования на стороне Windows довольно прост, в Delphi:

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 Ответ

1 голос
/ 06 февраля 2012

Может быть, это вам поможет (простое шифрование 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 равен >>, оператор не равен !.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...