SCrypto
##概述 SCrypto提供了一个简洁的 Swift 接口,用于访问 CommonCrypto 例程。
特征
- 基本的
Data
和String
扩展,用于消息摘要、HMAC、PBKDF、对称加密计算 - 支持 Swift 3.* 和 Swift 4.0
- 与 Cocoapods 和 Carthage 兼容
- 全面的单元测试覆盖率
- 完整的文档
- 支持 iOS 和 OS X
- 支持 Swift 包管理器
##要求
- iOS 9.0+ / macOS 10.11+
- Swift 3.0+
- Xcode 8.0+
##安装
Cocoapods
CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它
$ gem install cocoapods
要使用 Cocoapods 在 Xcode 项目中集成 SCrypto,请在您的 Podfile
中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
pod 'SCrypto', '~> 2.0.0'
然后,运行以下命令:
$ pod install
Carthage
Carthage 是一个去中心化的依赖管理器,它会构建您的依赖项并为您提供二进制框架。您可以使用以下命令使用 Homebrew 安装 Carthage
$ brew update
$ brew install carthage
要将SCrypto集成到您的Xcode项目中使用Carthage,请在您的Cartfile
中指定它
github "sgl0v/SCrypto" ~> 1.0.0
运行carthage update
构建框架,并将已构建的SCrypto.framework
拖到您的Xcode项目中。
手动操作
如果您不希望使用上述任何依赖管理器,您可以将SCrypto手动集成到项目中。
- 打开终端,使用
cd
进入您顶级项目目录,如果您项目未初始化为git仓库,则运行以下命令
$ git init
- 通过运行以下命令将SCrypto添加为git 子模块
$ git submodule add https://github.com/sgl0v/SCrypto.git
-
打开新的
SCrypto
文件夹,并将SCrypto.xcodeproj
拖到您应用程序Xcode项目的Project Navigator中。SCrypto.xcodeproj
应该嵌套在您的应用程序蓝色项目图标下方。它是否在所有其他Xcode组之上或之下无关紧要。 -
在Project Navigator中选择
SCrypto.xcodeproj
,并验证其部署目标是否与应用程序目标相同。 -
接下来,在Project Navigator中(蓝色项目图标)选择您的应用程序项目,导航到目标配置窗口,并在侧边栏的“Targets”标题下选择应用程序目标。
-
在该窗口的选项卡栏中,打开“General”面板。
-
在“Embedded Binaries”部分下点击
+
按钮。 -
您将看到两个不同的
SCrypto.xcodeproj
文件夹,每个文件夹中都有两个不同版本的SCrypto.framework iOS
嵌套在“Products”文件夹中。您可以选择哪个“Products”文件夹无关紧要。
-
只需选择
SCrypto.framework iOS
即可!SCrypto.framework
将自动添加为目标依赖,并在Build Phases
部分中显示为链接和嵌入的框架。
##使用方法
MD5,SHA)
消息摘要(消息摘要是一种安全的单向加密散列函数,它接受任意大小的数据,并输出固定长度的散列值。
let sha256 = "message".SHA256()
HMAC)
密钥散列消息认证码(基于哈希的消息认证码(或称为HMAC)提供了一种使用密码哈希函数结合密钥计算消息认证码的方法。您可以使用HMAC来验证消息的完整性和真实性。以下标准哈希算法受支持:SHA1、MD5、SHA256、SHA384、SHA512、SHA224。
let secretKey = try! Data.random(32)
let message = "message".data(using: String.Encoding.utf8)!
let hmac = message.hmac(.SHA256, key: secretKey)
PRNG)
伪随机数生成器(生成适合用作密码密钥、IV、随机数等的强随机位。
let randomBytes = try! Data.random(16)
AES、DES、TripleDES、CAST、RC2、RC4、Blowfish)
对称密钥算法(对称密钥算法使用相同的密码密钥进行明文的加密和密文的解密。注意,对称加密只提供保密性,但不提供完整性。有一种新的加密模式结合了对称加密和完整性检查(不受CommonCrypto支持)。因此,强烈建议结合加密和HMAC。
以下是通过AES算法在CBC模式下使用PKCS7填充进行数据加密和解密的方法。
let plaintext = "plain text".data(using: String.Encoding.utf8)!
let sharedSecretKey = "shared_secret_key".data(using: String.Encoding.utf8)!.SHA256() // AES-256
let IV = try! Data.random(16) // Randomly generated IV. Length is equal to the AES block size(128)
let ciphertext = try! plaintext.encrypt(.AES, options: .PKCS7Padding, key: sharedSecretKey, iv: IV)
let plaintext2 = try! ciphertext.decrypt(.AES, options: .PKCS7Padding, key: sharedSecretKey, iv: IV)
PBKDF2)
基于密码的密钥派生函数(密钥派生函数用于将密码短语转换为任意长度的密钥,用于在随后的操作中作为密码密钥。
let password = "password".data(using: String.Encoding.utf8)!
let salt = try! Data.random(32)
let derivedKey = try! password.derivedKey(salt, pseudoRandomAlgorithm: .SHA256, rounds: 20, derivedKeyLength: 32)
##其他选择 正在寻找其他内容?请尝试使用其他Swift CommonCrypto包装器
##许可证
SCrypto
是 MIT 许可。见 LICENSE
。