当前位置: > > > Swift - 第三方加密库CryptoSwift使用详解1(数据类型转换、MD5、SHA)

Swift - 第三方加密库CryptoSwift使用详解1(数据类型转换、MD5、SHA)

一、基本介绍

1,什么是 CryptoSwift

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

2,安装配置

(1)将下载下来的源码包中 CryptoSwift.xcodeproj 拖拽至我们的工程中。

(2)工程 -> General -> Embedded Binaries 项,把 CryptoSwift.framework 添加进来。

(3)最后,在需要使用 CryptoSwift 的地方将其 import 进来就可以了。
import CryptoSwift

二、常用的数据类型转换

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

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

//bytes转Data
let data = Data(bytes: [0x01, 0x02, 0x03])

//Data转bytes
let bytes = data.bytes

2,十六进制编码

//使用十六进制编码的形式建立字节数组
let bytes = Array<UInt8>(hex: "0x010203")  // [1,2,3]

//将字节数组转换为对应的十六进制编码
let hex = bytes.toHexString()  // "010203"

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

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

4,字节数组的 base64 转换

//字节数组的base64编码
let bytes:[UInt8] = [1, 2, 3]
let base64String1 = bytes.toBase64() //AQID

//字符串的base64编码
let string = "hangge.com"
let base64String2 = string.bytes.toBase64() //aGFuZ2dlLmNvbQ==

三、散列/哈希算法

1,计算 MD5 值

  • MD5RFC1321)诞生于 1991 年,全称是“Message-Digest Algorithm(信息摘要算法)5”,由 MIT 的计算机安全实验室和 RSA 安全公司共同提出。
  • 之前已经有 MD2MD3 MD4 几种算法。MD5 克服了 MD4 的缺陷,生成 128bit 的摘要信息串,出现之后迅速成为主流算法,并在 1992 年被收录到 RFC 中。

(1)下面是计算各种类型数据的 MD5 值。
/*** 计算字节数组的MD5值 ***/
let bytes:Array<UInt8> = [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

(2)也可以通过 update 接口拼接多个字节数组一起计算。比如下面两种方式的计算结果是一样的。
//方式一
print("hangge.com".md5()) //7c19a729eb62e03fcf1a8b4abbf591ed

//方式二
do {
    var digest = MD5()
    let partial1 = try digest.update(withBytes: "hangge".bytes)
    let partial2 = try digest.update(withBytes: ".com".bytes)
    let result = try digest.finish()
    print(result.toHexString()) //7c19a729eb62e03fcf1a8b4abbf591ed
} 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 为主流。

(1)下面是计算各种类型数据的 SHA 值。
/*** 计算字节数组的SHA值 ***/
let bytes:Array<UInt8> = [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()

(2)也可以通过 update 接口拼接多个字节数组一起计算。比如下面两种方式的计算结果是一样的。
//方式一
print("hangge.com".sha1()) //87590e9784b527b23048aaa2e8af5eeecb0b8885

//方式二
do {
    var digest = SHA1()
    let partial1 = try digest.update(withBytes: "hangge".bytes)
    let partial2 = try digest.update(withBytes: ".com".bytes)
    let result = try digest.finish()
    print(result.toHexString()) //87590e9784b527b23048aaa2e8af5eeecb0b8885
} catch { }
评论0