CC_MD5 is deprecated: first deprecated in iOS 13.0 - This function is cryptographically broken and should not be used in security contexts. Clients should migrate to SHA256 (or stronger).
表示 CC_MD5
函数已经被弃用,并且不建议在安全上下文中使用。
解释
-
CC_MD5
函数:CC_MD5
是 Apple 提供的一个用于计算 MD5 哈希值的函数。- MD5 是一种广泛使用的哈希函数,但它已经被证明在安全方面存在严重缺陷,容易受到碰撞攻击。
-
弃用:
CC_MD5
函数在 iOS 13.0 中被标记为弃用(deprecated)。- 这意味着 Apple 不再推荐使用这个函数,并且在未来版本的操作系统中可能会完全移除它。
-
安全问题:
- MD5 哈希算法已经被证明是不安全的,容易受到各种攻击,如碰撞攻击。这意味着两个不同的输入可以产生相同的哈希值,这在安全上下文中是不可接受的。
-
替代方案:
- Apple 建议使用更安全的哈希算法,如 SHA-256 或更强的算法。
- SHA-256 是一种更安全的哈希算法,目前没有已知的有效攻击方法。
解决方法
- 迁移到 SHA-256:
- 你可以使用
CommonCrypto
库中的CC_SHA256
函数来替换CC_MD5
。
- 你可以使用
示例代码
假设你原来使用 CC_MD5
来计算一个字符串的哈希值,现在可以改为使用 CC_SHA256
。
原来的代码(使用 CC_MD5
):
#import <CommonCrypto/CommonDigest.h>
NSString *md5Hash(NSString *input) {
NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5(data.bytes, data.length, digest);
NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[output appendFormat:@"%02x", digest[i]];
}
return output;
}
修改后的代码(使用 CC_SHA256
):
#import <CommonCrypto/CommonDigest.h>
NSString *sha256Hash(NSString *input) {
NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];
unsigned char digest[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(data.bytes, data.length, digest);
NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
[output appendFormat:@"%02x", digest[i]];
}
return output;
}
总结
- MD5 已经不安全:MD5 哈希算法存在严重的安全问题,不建议在安全上下文中使用。
- Apple 的建议:Apple 建议迁移到更安全的哈希算法,如 SHA-256。
- 代码修改:你可以使用
CommonCrypto
库中的CC_SHA256
函数来替换CC_MD5
,以提高代码的安全性。