测试已测试 | ✗ |
Lang语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2015年11月 |
SPM支持 SPM | ✗ |
由 Peter Siegesmund 维护。
依赖关系 | |
SwiftDDP | >= 0 |
XCGLogger | >= 0 |
使用 Swift 编写的 Swift 相关函数和辅助工具。(#PureSwift)
功能
安装
请查阅最新版本,请查看 develop 分支。这是即将合并到 master 分支的 最新开发版本。
要安装CryptoSwift,将其作为子模块添加到您的项目(在顶级项目目录中)
git submodule add https://github.com/krzyzanowskim/CryptoSwift.git
嵌入框架需要至少iOS 8或OS X Mavericks(10.9)的部署目标。将CryptoSwift.xcodeproj
文件拖入您的Xcode项目,并将适当的框架作为依赖项添加到您的目标中。现在选择您的App,为应用程序目标选择“通用”选项卡。将框架拖到嵌入的二进制文件。
在项目中,您将找到三个针对每个支持SDK配置的目标。
您可能需要选择您需要构建用于您的应用程序的CryptoSwift.framework
的目标。
或者,您可以在Xcode项目中链接Universal Framework。要这样做,请运行build.sh
脚本来构建,然后在Framework
目录中找到生成的框架。
正在寻找Swift 1.2的版本?请查看分支swift12,它在那里。
import CryptoSwift
为了您的方便,您应该使用诸如encrypt()、decrypt()、md5()、sha1()等方法扩展方法。
哈希字节或字节数组(即Array
)
/* Hash enum usage */
let input:[UInt8] = [49, 50, 51]
let output = input.md5()
// alternatively: let output = CryptoSwift.Hash.md5(input).calculate()
print(output.toHexString())
let data = NSData()
let hash = data.md5()
let hash = data.sha1()
let hash = data.sha224()
let hash = data.sha256()
let hash = data.sha384()
let hash = data.sha512()
let crc32 = data.crc32()
let crc16 = data.crc16()
print(hash.toHexString())
哈希字符串并打印结果
let hash = "123".md5()
某些内容加密算法假设输入长度是k八进制的一个倍数,其中k大于1。对于这类算法,输入应该被填充。
let paddedData = PKCS7().add(bytes, AES.blockSize)
与密码的工作
ChaCha20
let encrypted: [UInt8] = ChaCha20(key: key, iv: iv).encrypt(message)
let decrypted: [UInt8] = ChaCha20(key: key, iv: iv).decrypt(encrypted)
AES
关于填充的通知:数据的手动填充是可选的,当使用Cipher枚举时,CryptoSwift默认始终会在加密前添加PKCS7填充,在解密后删除。如果您需要手动禁用/启用填充,可以在类AES上设置encrypt()/decrypt()参数。
基本
let input = NSData()
let encrypted = try! input.encrypt(AES(key: "secret0key000000", iv:"0123456789012345"))
let input: [UInt8] = [0,1,2,3,4,5,6,7,8,9]
input.encrypt(AES(key: "secret0key000000", iv:"0123456789012345", blockMode: .CBC))
将字符串加密为Base64字符串结果
// Encrypt string and get Base64 representation of result
let base64: String = try! "my secret string".encrypt(AES(key: "secret0key000000", iv: "0123456789012345"))
…在底层数据[:ÚèÎÄ]会转换为NSData,再转换为Base64字符串表示
let encryptedBytes: [UInt8] = try "my secret string".encrypt(AES(key: "secret0key000000", iv: "0123456789012345")
let base64 = NSData(bytes: encryptedBytes).base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
高级
let input: [UInt8] = [0,1,2,3,4,5,6,7,8,9]
let key: [UInt8] = [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
let iv: [UInt8] = AES.randomIV(AES.blockSize)
do {
let encrypted: [UInt8] = try AES(key: key, iv: iv, blockMode: .CBC).encrypt(input, padding: PKCS7())
let decrypted: [UInt8] = try AES(key: key, iv: iv, blockMode: .CBC).decrypt(input, padding: PKCS7())
} catch AES.Error.BlockSizeExceeded {
// block size exceeded
} catch {
// some error
}
AES不带数据填充
let input: [UInt8] = [0,1,2,3,4,5,6,7,8,9]
let encrypted: [UInt8] = try! AES(key: "secret0key000000", iv:"0123456789012345", blockMode: .CBC).encrypt(input)
使用扩展
let plain = NSData()
let encrypted: NSData = try! plain.encrypt(ChaCha20(key: key, iv: iv))
let decrypted: NSData = try! encrypted.decrypt(ChaCha20(key: key, iv: iv))
// plain == decrypted
消息认证器
// Calculate Message Authentication Code (MAC) for message
let mac: [UInt8] = try! Authenticator.Poly1305(key: key).authenticate(input)
为了您的方便,CryptoSwift提供两个函数,可以轻松地将字节数组转换为NSData,反之亦然。
let data: NSData = NSData(bytes: [0x01, 0x02, 0x03])
let bytes:[UInt8] = data.arrayOfBytes()
CryptoSwift由Marcin Krzyżanowski拥有并维护。您可以在Twitter上关注我@krzyzanowskim了解项目的更新和发布。
版权© 2014 Marcin Krzyżanowski [email protected] 此软件按“原样”提供,不提供任何明示或暗示的保证。
在任何情况下,作者都不会因使用此软件而导致的任何损害而负有责任。
任何人都可以出于任何目的使用此软件,包括商业应用程序,并自由修改和重新分发它,前提是遵守以下限制。
见 CHANGELOG 文件