0

I am using md5 algorithm to archive credit card information in my app with the following method:

- (NSString *)uniqueID {
// nsobject --> nsdata -- > md5 hash --> hex string (30 chars)
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5([data bytes], (uint32_t)[data length], result);
return [NSString stringWithFormat:
       @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
       result[0], result[1], result[2], result[3],
       result[4], result[5], result[6], result[7],
       result[8], result[9], result[10], result[11],
       result[12], result[13], result[14], result[15]
];
}

I am also retrieving the data using the same algorithm. However, I found that after printing (NSLOG):

[self uniqueID]; 

I would get two different results. "self" is a credit card class I have created. Does anybody know why this is happening?

Here are the two methods I'm using to save and delete credit card:

- (BOOL)deleteCard {
return [Archiver delete:[self uniqueID]];
}

- (BOOL)saveCard {
return [Archiver persist:self key:[self uniqueID]];
}
Eric Chuang
  • 1,017
  • 9
  • 28
  • Firstly, http://www.stopusingmd5now.com. Do you know if `[+NSKeyedArchiver archivedDataWithRootObject:]` guarantees that the coding is the same each time? Or is there maybe an `NSDictionary` that encodes differently depending on its capacity? – Mats May 19 '16 at 10:05
  • I think you need to show us what your `encodeWithCoder:` and `initWithCoder:` methods look like. – pajevic May 20 '16 at 06:47

0 Answers0