什么是 CryptoKit,为什么需要它?
\n\nCryptoKit 是 Apple 公司开发的用于密码学操作的框架,直接内置于 Swift 生态系统中。它从 iOS 13、macOS 10.15、watchOS 6 和 tvOS 13 开始可用。与第三方库不同,CryptoKit 是一个原生解决方案,保证了高性能、安全性以及与 Secure Enclave 密钥管理系统的完全集成。
\n\n为什么需要 CryptoKit?在现代应用开发中,数据安全已成为重中之重。CryptoKit 为开发者提供了一个简单而强大的接口,用于:
\n- \n
- 数据哈希(SHA-256、SHA-384、SHA-512) \n
- 对称加密(AES-GCM、ChaCha20-Poly1305) \n
- 非对称加密(Curve25519、P-256、P-384、P-521) \n
- 数字签名(EdDSA、ECDSA) \n
- 生成密码学安全的随机数 \n
- 密钥交换(椭圆曲线 Diffie-Hellman) \n
该库的设计旨在最大限度地减少开发者错误:它默认使用安全实现,自动管理内存,并且不允许使用过时或不安全的算法(例如 MD5 或 SHA-1 用于签名)。
\n\n安装 CryptoKit
\n\n由于 CryptoKit 是 Apple 标准库的一部分,不需要通过包管理器(CocoaPods、Swift Package Manager 或 Carthage)进行安装。您只需要一个最低部署目标为 iOS 13+ 或 macOS 10.15+ 的项目。
\n\n重要提示:如果您针对更旧的操作系统版本进行开发,则 CryptoKit 不可用。在这种情况下,请使用 CommonCrypto(C 级别)或第三方库(例如 CryptoSwift)。
\n\n要在代码中检查 CryptoKit 的可用性,请使用:
\nimport CryptoKit\n\nif #available(iOS 13.0, macOS 10.15, *) {\n // 您的 CryptoKit 代码\n} else {\n // 回退到 CommonCrypto\n}\n\n快速入门及代码示例
\n\n让我们看一个最简单的例子:字符串哈希和对称加密。
\n\nimport CryptoKit\nimport Foundation\n\n// 1. 哈希\nlet inputString = "Hello, CryptoKit!"\nlet inputData = Data(inputString.utf8)\nlet hash = SHA256.hash(data: inputData)\nprint("SHA256 哈希: \\(hash.compactMap { String(format: "%02x", $0) }.joined())")\n\n// 2. 对称加密 (AES-GCM)\nlet key = SymmetricKey(size: .bits256) // 生成 256 位密钥\nlet plaintext = "秘密消息".data(using: .utf8)!\n\ndo {\n let sealedBox = try AES.GCM.seal(plaintext, using: key)\n print("加密数据: \\(sealedBox.ciphertext.base64EncodedString())")\n \n // 解密\n let openedBox = try AES.GCM.open(sealedBox, using: key)\n let decryptedString = String(data: openedBox, encoding: .utf8)!\n print("解密消息: \\(decryptedString)")\n} catch {\n print("加密错误: \\(error)")\n}\n\nCryptoKit 的主要方法和函数
\n\n以下是 CryptoKit 的 10 个关键函数,包含详细描述、参数和示例。
\n\n1. SHA256.hash(data:)
\n描述:计算传入数据的 SHA-256 哈希。返回一个 SHA256Digest 对象。
参数:
\n- \n
data: Data— 要进行哈希的原始数据。 \n
示例:
\nlet data = "示例数据".data(using: .utf8)!\nlet digest = SHA256.hash(data: data)\nprint(digest.description) // 输出: SHA256 digest: 8f4343... (64 个字符)\n\n2. SHA384.hash(data:)
\n描述:类似于 SHA256,但使用 384 位摘要。更安全,但速度较慢。
\n参数:相同,请