2012-02-05 16 views
0

Objective-Cを使用してOSXアプリケーションを作成していますが、Windowsマシンで単純なビットを使用して暗号化されたtext /シフトアルゴリズム。 Windowsの側の暗号化コードは、Delphiで、非常に簡単です:Objective-c: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

が、これはあなたの(簡単な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で右シフトは>>、オペレータは!ではありません。

+0

ありがとうございます。私はそれを通って作業し、結果、質問などを取り戻す時間がかかります。 –

+0

私はついに、座って働かせる時間がありました。コードは大きな助けとなりました。 1つのメモ;ビットごとのNOT演算子は**〜**ではなく**!**です。コードは次のようになります。 NSMutableData * fileData = [NSMutableData dataWithContentsOfFile:dataPath]; UInt16 currentCipher = ????; unsigned char * bytes =(符号なしchar *)malloc([fileData長さ]); [fileData getBytes:bytes]; (int i = 0; i <[fileData length]; i ++){ bytes [i]^=〜(currentCipher >> i); } [ファイルデータsetData:[NSMutableData dataWithBytes:バイト長:[ファイルデータ長]]]; もう一度ありがとうございます。 –

関連する問題