[概述 • 要求 • 安装 • 用法 • 替代方案 • 许可]
SCrypto 提供简洁的 Swift 接口来访问 CommonCrypto 例程。
Data
和 String
扩展CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它
$ gem install cocoapods
要使用 CocoaPods 将 SCrypto 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
pod 'SCrypto', '~> 2.0.0'
然后,运行以下命令
$ pod install
Carthage 是一个去中心化的依赖管理器,它构建您的依赖项并为您提供二进制框架。您可以使用 Homebrew 使用以下命令安装 Carthage
$ brew update
$ brew install carthage
要使用 Carthage 将 SCrypto 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它
github "sgl0v/SCrypto" ~> 1.0.0
运行 carthage update
以构建框架并将构建的 SCrypto.framework
拖到您的 Xcode 项目中。
您可以通过 Swift Package Manager 将 SCrypto 框架添加到您的项目中。将以下行添加到您的 Package.swift
文件中的依赖项中
.package(url: "https://github.com/sgl0v/SCrypto", exact: "<latest version>"),
最后,将 “SCrypto” 作为您可执行目标的依赖项包含进来
.target(name: "<target name>", dependencies: ["SCrypto"])
如果您不想使用任何提及的依赖管理器,您可以手动将 SCrypto 集成到您的项目中。
cd
进入您的顶层项目目录,如果您的项目未初始化为 git 仓库,请运行以下命令$ git init
$ git submodule add https://github.com/sgl0v/SCrypto.git
打开新的 SCrypto
文件夹,并将 SCrypto.xcodeproj
拖到您的应用程序 Xcode 项目的项目导航器中。
SCrypto.xcodeproj
应该出现在您的应用程序蓝色项目图标下。它在所有其他 Xcode 组之上还是之下并不重要。
在项目导航器中选择 SCrypto.xcodeproj
并验证部署目标是否与您的应用程序目标匹配。
接下来,在项目导航器中选择您的应用程序项目(蓝色项目图标)以导航到目标配置窗口,并在侧边栏的“Targets”标题下选择应用程序目标。
在该窗口顶部的选项卡栏中,打开“General”面板。
单击“Embedded Binaries”部分下的 +
按钮。
您将看到两个不同的 SCrypto.xcodeproj
文件夹,每个文件夹内都有两个不同版本的 SCrypto.framework iOS
,嵌套在 Products
文件夹中。
从哪个
Products
文件夹中选择并不重要。
只需选择 SCrypto.framework iOS
就完成了!
SCrypto.framework
会自动添加为目标依赖项,并且应该在Build Phases
部分显示为链接的和嵌入的框架。
消息摘要是安全的单向 密码散列函数,它接受任意大小的数据并输出固定长度的散列值。
let sha256 = "message".SHA256()
基于散列的消息认证码 (或 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)
生成密码学上强大的随机位,适用于用作加密密钥、IV、nonce 等。
let randomBytes = try! Data.random(16)
对称密钥算法对明文加密和密文解密使用相同的密钥。请注意,对称加密仅提供保密性,但不提供完整性。最近出现了一些结合对称加密和校验完整性的加密模式(CommonCrypto 不支持)。因此,强烈建议将加密与 HMAC 结合使用。
以下是在 CBC 模式下使用 PKCS7 填充通过 AES 算法加密和解密数据的方法
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)
密钥派生函数用于将密码短语转换为任意长度的密钥,以用作后续操作中的加密密钥。
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
。