我正在使用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的方法,但没有任何成功。
非常感谢任何帮助或建议。
答案 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中右移也是>>
,而不是运算符是!
。