CryptoSwift 是一个专为 Swift 语言设计的加密工具库,提供了丰富的加密相关函数和辅助工具。它完全由 Swift 实现,支持跨平台使用,包括 iOS、macOS、watchOS、tvOS、Android 和 Linux 系统。本文将深入介绍 CryptoSwift 的核心功能、安装方法以及常见使用场景。
核心功能概览
CryptoSwift 提供了多种加密算法和工具,涵盖了哈希计算、消息认证、密码学算法等关键领域。
哈希计算(Digest)
支持多种哈希算法,包括:
- MD5
- SHA1
- SHA2 系列(224、256、384、512)
- SHA3
循环冗余校验(CRC)
提供多种 CRC 算法:
- CRC32
- CRC32C
- CRC16
加密算法(Cipher)
支持对称加密算法:
- AES(128、192、256)
- ChaCha20
- XChaCha20
- Rabbit
- Blowfish
消息认证
包含多种消息认证机制:
- Poly1305
- HMAC(支持 MD5、SHA1、SHA256)
- CMAC
- CBC-MAC
加密模式
支持多种块密码工作模式:
- ECB(电子密码本模式)
- CBC(密码块链模式)
- PCBC(传播密码块链模式)
- CFB(密码反馈模式)
- OFB(输出反馈模式)
- CTR(计数器模式)
- GCM(伽罗瓦/计数器模式)
- CCM(计数器与密码块链消息认证码模式)
- OCB(认证加密算法模式)
密钥派生函数
提供多种密码-Based密钥派生功能:
- PBKDF1
- PBKDF2
- HKDF
- Scrypt
数据填充方案
支持多种数据填充方式:
- PKCS#5
- EMSA-PKCS1-v1_5
- EME-PCKS1-v1_5
- PKCS#7
- Zero padding
- ISO78164
- ISO10126
- 无填充
认证加密与关联数据(AEAD)
支持现代认证加密模式:
- AEAD_CHACHA20_POLY1305
- AEAD_XCHACHA20_POLY1305
安装指南
CryptoSwift 支持多种安装方式,适合不同的开发环境。
Swift Package Manager
在 Package.swift 文件中添加依赖:
.package(url: "https://github.com/krzyzanowskim/CryptoSwift.git", from: "1.8.5")CocoaPods
在 Podfile 中添加:
pod 'CryptoSwift', '~> 1.8.5'Carthage
在 Cartfile 中添加:
github "krzyzanowskim/CryptoSwift"手动集成
将 CryptoSwift 作为子模块添加到项目中:
git submodule add https://github.com/krzyzanowskim/CryptoSwift.git基本使用方法
数据类型转换
CryptoSwift 使用字节数组(Array
// Data 转字节数组
let data = Data([0x01, 0x02, 0x03])
let bytes = data.bytes // [1, 2, 3]
// 十六进制编码
let bytes = Array<UInt8>(hex: "0x010203") // [1, 2, 3]
let hex = bytes.toHexString() // "010203"
// 字符串转字节
let bytes: Array<UInt8> = "cipherkey".bytes哈希计算示例
// 计算 MD5
let hash = "123".md5()
// 计算 SHA256
let data = Data([0x01, 0x02, 0x03])
let hash = data.sha256()
// 增量计算
do {
var digest = MD5()
let partial1 = try digest.update(withBytes: [0x31, 0x32])
let partial2 = try digest.update(withBytes: [0x33])
let result = try digest.finish()
} catch { }AES 加密解密
// AES-256 示例
let password: [UInt8] = Array("s33krit".utf8)
let salt: [UInt8] = Array("nacllcan".utf8)
// 生成密钥
let key = try PKCS5.PBKDF2(
password: password,
salt: salt,
iterations: 4096,
keyLength: 32,
variant: .sha256
).calculate()
// 生成随机 IV
let iv = AES.randomIV(AES.blockSize)
// 创建 AES 实例
let aes = try AES(key: key, blockMode: CBC(iv: iv), padding: .pkcs7)
// 加密数据
let inputData = Data()
let encryptedBytes = try aes.encrypt(inputData.bytes)
let encryptedData = Data(encryptedBytes)
// 解密数据
let decryptedBytes = try aes.decrypt(encryptedData.bytes)
let decryptedData = Data(decryptedBytes)高级功能应用
ChaCha20 加密
let encrypted = try ChaCha20(key: key, iv: iv).encrypt(message)
let decrypted = try ChaCha20(key: key, iv: iv).decrypt(encrypted)RSA 加密与签名
// RSA 密钥生成
let rsa = try RSA(keySize: 2048)
// 加密
let encrypted = try rsa.encrypt(input)
// 解密
let decrypted = try rsa.decrypt(encrypted)
// 签名
let signature = try rsa.sign(message.bytes)
// 验证签名
let verified = try rsa.verify(signature: signature, for: message.bytes)AES-GCM 认证加密
// GCM 加密
let gcm = GCM(iv: iv, mode: .combined)
let aes = try AES(key: key, blockMode: gcm, padding: .noPadding)
let encrypted = try aes.encrypt(plaintext)
let tag = gcm.authenticationTag
// GCM 解密
let gcm = GCM(iv: iv, mode: .combined)
let aes = try AES(key: key, blockMode: gcm, padding: .noPadding)
let decrypted = try aes.decrypt(encrypted)性能优化建议
为了获得最佳性能,建议启用 Whole-Module Optimization。在 Xcode 项目中,可以通过以下方式配置:
- 进入项目设置
- 选择 Build Settings
- 搜索 "Optimization Level"
- 为 Release 模式设置 "-Owholemodule"
常见问题
CryptoSwift 支持哪些平台?
CryptoSwift 支持 iOS、macOS、watchOS、tvOS、Android 和 Linux 平台,具有很好的跨平台兼容性。
如何处理大型文件的加密?
对于大型文件,建议使用增量更新方式,这样可以节省内存并提高性能:
do {
var encryptor = try AES(key: key, iv: iv).makeEncryptor()
var ciphertext = Array<UInt8>()
// 分块处理数据
ciphertext += try encryptor.update(withBytes: chunk1)
ciphertext += try encryptor.update(withBytes: chunk2)
ciphertext += try encryptor.finish()
} catch {
print(error)
}如何选择正确的密钥长度?
密钥长度取决于使用的算法:
- AES-128:16 字节密钥
- AES-192:24 字节密钥
- AES-256:32 字节密钥
确保为所选算法提供正确长度的密钥。
CryptoSwift 是否支持 Objective-C?
CryptoSwift 是纯 Swift 库,主要面向 Swift 项目。如果需要在 Objective-C 中使用加密功能,可能需要考虑其他支持 Objective-C 的加密库。
如何保证加密安全性?
除了使用强大的加密算法外,还应该:
- 使用安全的随机数生成器生成 IV
- 使用适当的密钥派生函数
- 定期更新密钥
- 遵循最佳实践的安全协议
遇到性能问题怎么办?
如果遇到性能问题,可以:
- 启用 Whole-Module Optimization
- 使用 Release 构建配置
- 考虑使用预编译的 XCFramework
- 对于大型数据,使用流式处理
总结
CryptoSwift 是一个功能强大且易于使用的 Swift 加密库,提供了丰富的加密算法和工具。无论是基本的哈希计算还是复杂的认证加密,CryptoSwift 都能提供可靠的解决方案。通过合理的安装配置和性能优化,开发者可以轻松地在各种 Swift 项目中集成强大的加密功能。
记得在使用任何加密软件前,了解并遵守所在国家的相关法律法规。加密技术的正确使用可以保护数据安全,但同时也需要承担相应的法律责任。