Swift - 第三方加密库CryptoSwift使用详解1(数据类型转换、MD5、SHA)
一、基本介绍
1,什么是 CryptoSwift
CryptoSwift 是一个使用 Swift 编写的加密工具包,支持多种加密算法,如:MD5、SHA1、AES-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 值
- MD5(RFC1321)诞生于 1991 年,全称是“Message-Digest Algorithm(信息摘要算法)5”,由 MIT 的计算机安全实验室和 RSA 安全公司共同提出。
- 之前已经有 MD2、MD3 和 MD4 几种算法。MD5 克服了 MD4 的缺陷,生成 128bit 的摘要信息串,出现之后迅速成为主流算法,并在 1992 年被收录到 RFC 中。
/*** 计算字节数组的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-1(RFC3174)替代。
- SHA-1 的应用范围或许比 MD5 更加广泛,其安全性较 MD5 要高出很多。美国政府更是早在 1994 年就开始采用了 SHA-1 算法。
- SHA-1 生成长度为 160bit 的摘要信息串,虽然之后又出现了 SHA-224、SHA-256、SHA-384 和 SHA-512 等被统称为“SHA-2”的系列算法,但仍以 SHA-1 为主流。
/*** 计算字节数组的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 { }