On 03/12/2010, at 12:30 AM, Adam Gerson wrote:

> I am writing an NSString to a file and I would like to obscure it in a
> two way reversible fashion. It doesn't have to be major hacker proof,
> just not understandable by an average person. I need to be able to
> read the value back in from the file and convert it back to "clear
> text". In php I would just use base64 encode / decode. All the cocoa
> examples I have found show converting in base64 between nsstring and
> nsdata. Is there a smiple function I can pass an NSString through to
> obscure it while keeping it as a string, then reverse it back to clear
> text in a reliable way?


Lots of ways to do this, but a very simple one is to take advantage of the fact 
that A ^ B ^ B = A, in other words, if you XOR something twice you get back the 
original.

So convert to bytes [NSString dataUsingEncoding], then XOR each byte with some 
constant. Save the data. To recover plain text, XOR with the same constant and 
convert back to a string. The constant should not be 0.

Note that this only obfuscates slightly - the text looks pretty scrambled but 
is still open to simple techniques such as frequency analysis. If you change 
the constant in some predetermined fashion for each byte you can make a much 
stronger 'encryption'.

(typed in mail):


- (NSData*) reversiblyObfuscateData:(NSData*) dataIn
{
    NSMutableData* dataOut = [NSMutableData data];

    NSUInteger n;
    char byte;

    for( n = 0; n < [dataIn length]; ++n )
    {
        [dataIn getBytes:&byte length:1];
        byte ^= 0xA5;
        [dataOut appendBytes:&byte length:1];
    }
    
    return dataOut;
}

--Graham_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to