SCrypto

Build Status codecov.io Version Carthage Compatible License

[概述要求安装用法替代方案许可]


概述

SCrypto 提供简洁的 Swift 接口来访问 CommonCrypto 例程。

特性


要求


安装

Cocoapods

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

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

您可以通过 Swift Package Manager 将 SCrypto 框架添加到您的项目中。将以下行添加到您的 Package.swift 文件中的依赖项中

.package(url: "https://github.com/sgl0v/SCrypto", exact: "<latest version>"),

最后,将 “SCrypto” 作为您可执行目标的依赖项包含进来

.target(name: "<target name>", dependencies: ["SCrypto"])

手动

如果您不想使用任何提及的依赖管理器,您可以手动将 SCrypto 集成到您的项目中。

$ git init
$ git submodule add https://github.com/sgl0v/SCrypto.git

用法

消息摘要 (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、nonce 等。

let randomBytes = try! Data.random(16)

对称密钥算法 (AES, DES, TripleDES, CAST, RC2, RC4, Blowfish)

对称密钥算法对明文加密和密文解密使用相同的密钥。请注意,对称加密仅提供保密性,但不提供完整性。最近出现了一些结合对称加密和校验完整性的加密模式(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)

基于密码的密钥派生函数 (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