CryptSwift SPM地址:
https://github.com/krzyzanowskim/CryptoSwift
使用前先import CryptSwift
MD5:
常被用作文件有效性的验证。MD5本不是加密算法,而是信息摘要算法。其最大的特点是原文本无论长度为多少,最后都会生成一个128位的散裂值。即使两个很相似的文本经过MD5操作后其结果可能发生翻天覆地的变化。
算法描述:MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
let digest1 = "md5".md5()
print("------> MD5 VALUE:\(digest1)")
结果:------> MD5 VALUE:1bc29b36f623ba82aaf6724fd3b16718
SHA:
SHA是一个密码散列家族算法,包括SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512。以SHA-512为例,其加密过程如下:
1:填充附加位
2:附加长度
3:初始化Hash缓冲区
4:以1024位分组(128个字节)为单位处理消息并输出结果
print("------> SHA1 \("swift".sha1())")
print("------> SHA224 \("swift".sha224())")
print("------> SHA256 \("swift".sha256())")
print("------> SHA384 \("swift".sha384())")
print("------> SHA512 \("swift".sha512())")
结果如下:
------> SHA1 49dab5697b6433548a8dcb4b794f63b110424cd3
------> SHA224 6ff5f6acdd065eba587e38516c062b3e0091ede1fc6be57db3fd8596
------> SHA256 a33603bf79f74b056172d43b78358a9d6a51ae59d2720741fbb33ce78e3ad607
------> SHA384 30ef36ba91edca92e14a62a5225f45e5584ea22e6a1c464ed14f3f614a50ddbcaa01e43ade2bde78cb06ad5426f7294d
------> SHA512 aecbf9a63cec1e93327dfc212f31acdb31c4f5d10bedccf8fbb8b042a6f0f39155797bdd04517905ae5d98b69fdc452cdb61b018e10939740ec96f36e133d639
AES:
计算机领域较为流行的加密算法之一。采用的加密算法系由明文P、密钥K、AES加密函数、密文C、AES解密函数组合操作而成。其安全性能在商业领域已得到充分认证,在C/S架构里面也成为了一个标准。
本例以最为简单的ECB模式进行说明。需要说明的是,密钥k的长度要为16位。
do {
let rawStr = "Taylor"
let rawKey = "Swift11111111111"
let aes = try AES(key: rawKey.bytes, blockMode: ECB())
let encrypted = try aes.encrypt(rawStr.bytes)
let encryptBase64 = encrypted.toBase64()
print("------> ENCRYPT BASE64: \(encryptBase64)")
let decrypted = try aes.decrypt(encrypted)
print("------> DECRYPT DIRECTLY: \(decrypted)")
let decryptedBase64 = try encryptBase64?.decryptBase64(cipher: aes)
print("-----> DECRYPT BASE64: \(decryptedBase64)")
} catch {
print("ERROR")
}
CRC:
根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。
print("------> CRC5: \("swift".crc16())")
print("------> CRC5: \("swift".crc32())")
结果:
------> CRC5: e4e5
------> CRC5: ad717c8c
POLY1305:
应用在互联网安全协议中的认证加密算法。
let str = "swift"
let key = "taylor12345678901234567890123456"
let hmac = try! HMAC(key: key.bytes, variant: .sha1).authenticate(str.bytes)
print("------> ORGINAL VALUE \(str)")
print("------> CRYPT VALUE \(hmac.toHexString())")
let poly1305 = try! Poly1305(key: key.bytes).authenticate(str.bytes)
print("------> POLY1305 \(poly1305)")
结果:
------> ORGINAL VALUE swift
------> CRYPT VALUE 7e20495d618af5e6c4f789cf4d5138dac1ff8ff4
------> POLY1305 [193, 152, 166, 211, 184, 237, 72, 76, 176, 209, 196, 111, 213, 54, 41, 182]