一、基本介绍

1,什么是 CryptoSwift

CryptoSwift 是一个使用 Swift 编写的加密工具包,支持多种加密算法,如:MD5SHA1AES-128 等等。

(1)下面是计算各种类型数据的 MD5 值。
(2)也可以通过 update 接口拼接多个字节数组一起计算。比如下面两种方式的计算结果是一样的。
(1)下面是计算各种类型数据的 SHA 值。
(2)也可以通过 update 接口拼接多个字节数组一起计算。比如下面两种方式的计算结果是一样的。

2,安装配置

(1)将下载下来的源码包中 CryptoSwift.xcodeproj 拖拽至我们的工程中。
image.png
(2)工程 -> General -> Embedded Binaries 项,把 CryptoSwift.framework 添加进来。
image.png
(3)最后,在需要使用 CryptoSwift 的地方将其 import CryptoSwift 进来就可以了。

二、常用的数据类型转换

首先 CryptoSwift 提供了一些方法方便我们进行一些常用的数据转换工作。

1,Data 与字节数组(bytes)间的转换

  1. //bytes转Data
  2. let data = Data(bytes: [0x01, 0x02, 0x03])
  3. //Data转bytes
  4. let bytes = data.bytes

2,十六进制编码

  1. //使用十六进制编码的形式建立字节数组
  2. let bytes = Array<UInt8>(hex: "0x010203") // [1,2,3]
  3. //将字节数组转换为对应的十六进制编码
  4. let hex = bytes.toHexString() // "010203"

3,使用字符串生成字节数组

  1. let bytes: Array<UInt8> = "password".bytes

4,字节数组的 base64 转换

  1. //字节数组的base64编码
  2. let bytes:[UInt8] = [1, 2, 3]
  3. let base64String1 = bytes.toBase64() //AQID
  4. //字符串的base64编码
  5. let string = "hangge.com"
  6. let base64String2 = string.bytes.toBase64() //aGFuZ2dlLmNvbQ==

三、散列/哈希算法

1,计算 MD5 值

  • MD5RFC1321)诞生于 1991 年,全称是“Message-Digest Algorithm(信息摘要算法)5”,由 MIT 的计算机安全实验室和 RSA 安全公司共同提出。
  • 之前已经有 MD2MD3 MD4 几种算法。MD5 克服了 MD4 的缺陷,生成 128bit 的摘要信息串,出现之后迅速成为主流算法,并在 1992 年被收录到 RFC 中。 ```swift / 计算字节数组的MD5值 / let bytes:Array = [0x01, 0x02, 0x03] //方式一 let digest1 = bytes.md5().toHexString() //5289df737df57326fcdd22597afb1fac //方式二 let digest2 = Digest.md5(bytes).toHexString() //5289df737df57326fcdd22597afb1fac

/ 计算Data的MD5值 / let data = Data(bytes: [0x01, 0x02, 0x03]) let digest3 = data.md5().toHexString() //5289df737df57326fcdd22597afb1fac

/ 计算字符串的MD5值 / let digest4 = “hangge.com”.md5() //7c19a729eb62e03fcf1a8b4abbf591ed

  1. ```swift
  2. //方式一
  3. print("hangge.com".md5()) //7c19a729eb62e03fcf1a8b4abbf591ed
  4. //方式二
  5. do {
  6. var digest = MD5()
  7. let partial1 = try digest.update(withBytes: "hangge".bytes)
  8. let partial2 = try digest.update(withBytes: ".com".bytes)
  9. let result = try digest.finish()
  10. print(result.toHexString()) //7c19a729eb62e03fcf1a8b4abbf591ed
  11. } catch { }

2,计算 SHA 值

  • SHA 诞生于 1993 年,全称是安全散列算法(Secure Hash Algorithm),由美国国家安全局(NSA)设计,之后被美国标准与技术研究院(NIST)收录到美国的联邦信息处理标准(FIPS)中,成为美国国家标准,SHA(后来被称作 SHA-0)于 1995 SHA-1RFC3174)替代。
  • SHA-1 的应用范围或许比 MD5 更加广泛,其安全性较 MD5 要高出很多。美国政府更是早在 1994 年就开始采用了 SHA-1 算法。
  • SHA-1 生成长度为 160bit 的摘要信息串,虽然之后又出现了 SHA-224SHA-256SHA-384 SHA-512 等被统称为“SHA-2”的系列算法,但仍以 SHA-1 为主流。 ```swift / 计算字节数组的SHA值 / let bytes:Array = [0x01, 0x02, 0x03] //方式一 let digest1 = bytes.sha1().toHexString() //7037807198c22a7d2b0807371d763779a84fdfcf let digest2 = bytes.sha224().toHexString() let digest3 = bytes.sha256().toHexString() let digest4 = bytes.sha384().toHexString() let digest5 = bytes.sha512().toHexString() //方式二 let digest6 = Digest.sha1(bytes).toHexString() //7037807198c22a7d2b0807371d763779a84fdfcf let digest7 = Digest.sha224(bytes).toHexString() let digest8 = Digest.sha256(bytes).toHexString() let digest9 = Digest.sha384(bytes).toHexString() let digest10 = Digest.sha512(bytes).toHexString()

/ 计算Data的SHA值 / let data = Data(bytes: [0x01, 0x02, 0x03]) let digest11 = data.sha1().toHexString() //7037807198c22a7d2b0807371d763779a84fdfcf let digest12 = data.sha224().toHexString() let digest13 = data.sha256().toHexString() let digest14 = data.sha384().toHexString() let digest15 = data.sha512().toHexString()

/ 计算字符串的SHA值 / let digest16 = “hangge.com”.sha1() //87590e9784b527b23048aaa2e8af5eeecb0b8885 let digest17 = “hangge.com”.sha224() let digest18 = “hangge.com”.sha256() let digest19 = “hangge.com”.sha384() let digest20 = “hangge.com”.sha512()

  1. ```swift
  2. //方式一
  3. print("hangge.com".sha1()) //87590e9784b527b23048aaa2e8af5eeecb0b8885
  4. //方式二
  5. do {
  6. var digest = SHA1()
  7. let partial1 = try digest.update(withBytes: "hangge".bytes)
  8. let partial2 = try digest.update(withBytes: ".com".bytes)
  9. let result = try digest.finish()
  10. print(result.toHexString()) //87590e9784b527b23048aaa2e8af5eeecb0b8885
  11. } catch { }

参考