CryptoKit for Swift:完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 CryptoKit,为什么需要它?

\n\n

CryptoKit 是 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
\n\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 的可用性,请使用:

\n
import CryptoKit\n\nif #available(iOS 13.0, macOS 10.15, *) {\n    // 您的 CryptoKit 代码\n} else {\n    // 回退到 CommonCrypto\n}
\n\n

快速入门及代码示例

\n\n

让我们看一个最简单的例子:字符串哈希和对称加密。

\n\n
import 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\n

CryptoKit 的主要方法和函数

\n\n

以下是 CryptoKit 的 10 个关键函数,包含详细描述、参数和示例。

\n\n

1. SHA256.hash(data:)

\n

描述:计算传入数据的 SHA-256 哈希。返回一个 SHA256Digest 对象。

\n

参数:

\n
    \n
  • data: Data — 要进行哈希的原始数据。
  • \n
\n

示例:

\n
let data = "示例数据".data(using: .utf8)!\nlet digest = SHA256.hash(data: data)\nprint(digest.description) // 输出: SHA256 digest: 8f4343... (64 个字符)
\n\n

2. SHA384.hash(data:)

\n

描述:类似于 SHA256,但使用 384 位摘要。更安全,但速度较慢。

\n

参数:相同,请

推荐