SCrypto 4.0.1

SCrypto 4.0.1

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最后发布2020年4月
SPM支持 SPM

Maksym Shcheglov 维护。



SCrypto 4.0.1

  • 作者:
  • Maksym Shcheglov

SCrypto

Build Status codecov.io Version Carthage Compatible License Platform

[概述要求安装使用替代许可]


##概述 SCrypto提供了一个简洁的 Swift 接口,用于访问 CommonCrypto 例程。

特征

  • 基本的 DataString 扩展,用于消息摘要、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部分中显示为链接和嵌入的框架。


##使用方法

消息摘要(MD5SHA

消息摘要是一种安全的单向加密散列函数,它接受任意大小的数据,并输出固定长度的散列值。

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)

对称密钥算法(AESDESTripleDESCASTRC2RC4Blowfish

对称密钥算法使用相同的密码密钥进行明文的加密和密文的解密。注意,对称加密只提供保密性,但不提供完整性。有一种新的加密模式结合了对称加密和完整性检查(不受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