运行下面的 MD5 实现在 macOS 10.15 中返回的结果与在 10.14 中不同
NSData 对象应该是相同的(不确定检查这一点的最佳方法 - 在两种情况下分配给 NSString 是(null)。我检查了长度并且两者都是相同的)
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5( self.bytes, (int)self.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]
];
有任何想法吗?
编辑: NSData 对象是使用以下(混淆)代码创建的:
NSData *firstData = [self.firstString dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *archivedData = [[NSKeyedArchiver archivedDataWithRootObject:secondString requiringSecureCoding:NO error:nil] mutableCopy];
[archivedData appendData:firstData];
return [archivedData MD5];
编辑:它实际上看起来像是不同的 NSData 对象。相同的字符串被传递到上面的代码中,在测试应用程序中硬编码。10.14和10.15还是有区别的
十六进制输出:
10.15
62706C69 73743030 D4010203 04050607 0A582476 65727369 6F6E5924 61726368 69766572 5424746F 7058246F 626A6563 74731200 0186A05F 100F4E53 4B657965 64417263 68697665 72D10809 54726F6F 748001A2 0B0C5524 6E756C6C 5F102C34 32373539 3930432D 42423235 36363143 2D434146 42424136 412D3031 46303242 42302D38 45364444 46303508 111A2429 3237494C 5153565C 00000000 00000101 00000000 0000000D 00000000 00000000 00000000 0000008B 47642437 2A752877 2B587852 684A7537 73342D39 39234625 305B413F 437A7434 4A722871 32245672 30406D58 50337251 71374644 372B522A 2D28462F 683E5F4B
10.14
62706C69 73743030 D4010203 04050609 0A582476 65727369 6F6E5824 6F626A65 63747359 24617263 68697665 72542474 6F701200 0186A0A2 07085524 6E756C6C 5F102C34 32373539 3930432D 42423235 36363143 2D434146 42424136 412D3031 46303242 42302D38 45364444 4630355F 100F4E53 4B657965 64417263 68697665 72D10B0C 54726F6F 74800108 111A232D 32373A40 6F818489 00000000 00000101 00000000 0000000D 00000000 00000000 00000000 0000008B 47642437 2A752877 2B587852 684A7537 73342D39 39234625 305B413F 437A7434 4A722871 32245672 30406D58 50337251 71374644 372B522A 2D28462F 683E5F4B