SwCrypt实战教程:10个常见加密场景代码示例详解
【免费下载链接】SwCryptRSA public/private key generation, RSA, AES encryption/decryption, RSA sign/verify in Swift with CommonCrypto in iOS and OS X项目地址: https://gitcode.com/gh_mirrors/sw/SwCrypt
SwCrypt是一个强大的Swift加密库,基于iOS和macOS的CommonCrypto框架,提供了RSA密钥生成、AES加解密、数字签名等完整加密功能。无论你是iOS开发新手还是经验丰富的开发者,掌握SwCrypt都能让你的应用安全级别提升一个档次!🚀
📦 1. 快速安装与项目集成
使用CocoaPods安装SwCrypt是最简单的方式:
pod 'SwCrypt'或者使用Swift Package Manager:
- 在Xcode中选择 "File" → "Swift Packages" → "Add Package Dependency..."
- 输入仓库地址:https://gitcode.com/gh_mirrors/sw/SwCrypt
- 点击 "Next" → "Next" → "Finish"
🔑 2. RSA密钥生成与格式转换
生成RSA密钥对是加密通信的基础:
// 生成2048位RSA密钥对 let (privateKey, publicKey) = try! CC.RSA.generateKeyPair(2048) // DER格式转PEM格式 let privateKeyPEM = try SwKeyConvert.PrivateKey.derToPKCS1PEM(privateKey) let publicKeyPEM = SwKeyConvert.PublicKey.derToPKCS8PEM(publicKey) // PEM格式转DER格式 let privateKeyDER = SwKeyConvert.PrivateKey.pemToPKCS1DER(privateKeyPEM) let publicKeyDER = SwKeyConvert.PublicKey.pemToPKCS1DER(publicKeyPEM)🔐 3. 私钥加密保护
保护私钥安全至关重要,SwCrypt支持OpenSSL兼容的私钥加密:
// 加密私钥 let encryptedPrivateKey = try SwKeyConvert.PrivateKey.encryptPEM( privateKeyPEM, passphrase: "myStrongPassword123", mode: .aes256CBC ) // 解密私钥 let decryptedPrivateKey = try SwKeyConvert.PrivateKey.decryptPEM( encryptedPrivateKey, passphrase: "myStrongPassword123" )📨 4. RSA数据加密与解密
使用RSA进行非对称加密,保护敏感数据传输:
let sensitiveData = "信用卡号:1234-5678-9012-3456".data(using: .utf8)! let tag = "transaction".data(using: .utf8)! // 使用公钥加密 let encryptedData = try CC.RSA.encrypt( sensitiveData, derKey: publicKey, tag: tag, padding: .oaep, digest: .sha1 ) // 使用私钥解密 let decryptedData = try CC.RSA.decrypt( encryptedData, derKey: privateKey, tag: tag, padding: .oaep, digest: .sha1 )✍️ 5. 数字签名与验证
确保数据完整性和身份验证:
let message = "重要合同内容".data(using: .utf8)! // 使用私钥签名 let signature = try CC.RSA.sign( message, derKey: privateKey, padding: .pss, digest: .sha256, saltLen: 16 ) // 使用公钥验证签名 let isValid = try CC.RSA.verify( message, derKey: publicKey, padding: .pss, digest: .sha256, saltLen: 16, signedData: signature ) print("签名验证结果:\(isValid ? "通过" : "失败")")🔄 6. AES对称加密(快速加密大量数据)
对于需要快速加密大量数据的场景,AES是最佳选择:
let plainText = "需要加密的敏感信息".data(using: .utf8)! let aesKey = CC.generateRandom(32) // 256位AES密钥 let iv = CC.generateRandom(16) // 初始化向量 // AES-CBC模式加密 let encrypted = try CC.crypt( .encrypt, blockMode: .cbc, algorithm: .aes, padding: .pkcs7Padding, data: plainText, key: aesKey, iv: iv ) // AES-CBC模式解密 let decrypted = try CC.crypt( .decrypt, blockMode: .cbc, algorithm: .aes, padding: .pkcs7Padding, data: encrypted, key: aesKey, iv: iv )🛡️ 7. 带认证的加密(AES-GCM/CCM)
需要同时保证机密性和完整性的高级场景:
let sensitiveData = "用户隐私数据".data(using: .utf8)! let additionalData = "元数据".data(using: .utf8)! let aesKey = CC.generateRandom(16) // 128位AES密钥 let iv = CC.generateRandom(12) // GCM推荐12字节IV // AES-GCM加密(带认证标签) let (cipherText, tag) = try CC.cryptAuth( .encrypt, blockMode: .gcm, algorithm: .aes, data: sensitiveData, aData: additionalData, key: aesKey, iv: iv, tagLength: 16 ) // AES-GCM解密并验证 let decryptedText = try CC.cryptAuth( .decrypt, blockMode: .gcm, algorithm: .aes, data: cipherText, aData: additionalData, key: aesKey, iv: iv, tagLength: 16 )🔐 8. 安全哈希与HMAC
数据完整性校验和消息认证:
let password = "myPassword123".data(using: .utf8)! // SHA-256哈希 let sha256Hash = CC.digest(password, alg: .sha256) // SHA-512哈希 let sha512Hash = CC.digest(password, alg: .sha512) // HMAC-SHA256消息认证码 let hmacKey = CC.generateRandom(32) let hmac = CC.HMAC(password, alg: .sha256, key: hmacKey) print("SHA-256哈希值:\(sha256Hash.hexEncodedString())") print("HMAC值:\(hmac.hexEncodedString())")🔑 9. 密钥派生与存储
安全地派生密钥并存储到iOS Keychain:
let password = "userPassword".data(using: .utf8)! let salt = CC.generateRandom(32) // PBKDF2密钥派生 let derivedKey = CC.KeyDerivation.PBKDF2( password, salt: salt, prf: .sha256, rounds: 100000 ) // 存储私钥到Keychain try SwKeyStore.upsertKey( privateKeyPEM, keyTag: "com.myapp.privateKey", options: [kSecAttrAccessible: kSecAttrAccessibleWhenUnlockedThisDeviceOnly] ) // 从Keychain读取私钥 let storedKey = try SwKeyStore.getKey("com.myapp.privateKey") // 删除Keychain中的密钥 try SwKeyStore.delKey("com.myapp.privateKey")🔄 10. 椭圆曲线加密与密钥交换
现代加密算法的代表,性能更优:
// 生成椭圆曲线密钥对 let (ecPrivateKey, ecPublicKey) = try CC.EC.generateKeyPair(256) // 计算共享密钥(Diffie-Hellman密钥交换) let partnerPublicKey = ... // 对方的公钥 let sharedSecret = try CC.EC.computeSharedSecret(ecPrivateKey, publicKey: partnerPublicKey) // 数字签名 let messageHash = CC.digest("重要消息".data(using: .utf8)!, alg: .sha256) let signature = try CC.EC.signHash(ecPrivateKey, hash: messageHash) // 验证签名 let verified = try CC.EC.verifyHash(ecPublicKey, hash: messageHash, signedData: signature)💡 最佳实践与注意事项
检查功能可用性
在使用前检查系统是否支持相关加密功能:
// 检查所有加密功能是否可用 if CC.available() { print("所有加密功能可用!") } // 或检查特定功能 let rsaAvailable = CC.RSA.available() let aesAvailable = CC.cryptorAvailable let hmacAvailable = CC.hmacAvailable()错误处理最佳实践
do { let encrypted = try CC.RSA.encrypt(data, derKey: publicKey, tag: tag, padding: .oaep, digest: .sha1) // 处理加密成功 } catch CC.CCError.paramError { print("参数错误:请检查密钥和输入数据") } catch CC.CCError.invalidKey { print("无效密钥:请使用正确的密钥格式") } catch { print("加密失败:\(error)") }性能优化建议
- 对称加密:对于大量数据,使用AES而不是RSA
- 密钥长度:RSA使用2048位以上,AES使用256位
- 内存管理:及时清除敏感数据的内存
- 线程安全:加密操作是线程安全的,但密钥管理需要注意
🎯 总结
SwCrypt为Swift开发者提供了完整的加密解决方案,涵盖了从基础的哈希计算到高级的椭圆曲线加密。通过这10个实战示例,你可以快速掌握:
- ✅ RSA密钥生成与格式转换
- ✅ 数据加密与解密
- ✅ 数字签名与验证
- ✅ AES对称加密
- ✅ 密钥安全存储
- ✅ 椭圆曲线加密
无论你是构建金融应用、安全通讯工具,还是需要保护用户隐私的普通应用,SwCrypt都能提供企业级的安全保障。立即开始使用SwCrypt,让你的应用安全无忧!🔒
核心文件路径参考:
- 主加密实现文件:SwCrypt/SwCrypt.swift
- 密钥转换工具:SwCrypt/SwCrypt.swift#L86
- 密钥存储管理:SwCrypt/SwCrypt.swift#L3
【免费下载链接】SwCryptRSA public/private key generation, RSA, AES encryption/decryption, RSA sign/verify in Swift with CommonCrypto in iOS and OS X项目地址: https://gitcode.com/gh_mirrors/sw/SwCrypt
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考