Swift - 第三方加密库CryptoSwift使用详解4(ChaCha20、Rabbit、Blowfish)
作者:hangge | 2017-12-08 08:10
七、其他加密算法
CryptoSwift 还提供了 ChaCha20、Rabbit、Blowfish 这三种加密算法,它们同上文介绍的 AES 一样都是对称加密算法。而且用法也差不多,加密时都需要提供一个密钥(key)和一个密钥偏移量(iv)。
1,ChaCha20
(1)基本介绍
- ChaCha20 是 ChaCha 系列流密码,作为 salsa 密码的改良版,具有更强的抵抗密码分析攻击的特性,“20”表示该算法有 20 轮的加密计算。
- 由于是流密码,故以字节为单位进行加密,安全性的关键体现在密钥流生成的过程,即所依赖的伪随机数生成器(PRNG)的强度,加密过程即是将密钥流与明文逐字节异或得到密文,反之,解密是将密文再与密钥流做一次异或运算得到明文。
- ChaCha20 已经在 RFC 7539 中标准化。
(2)使用样例
do { let str = "欢迎访问 hangge.com" print("原始字符串:\(str)") let key = "hangge.com123456hangge.com123456" print("key密钥:\(key)") let iv = "12345678" print("密钥偏移量:\(iv)") //使用ChaCha20加密模式 let chiper = try ChaCha20(key: key.bytes, iv: iv.bytes) //开始加密 let encrypted = try chiper.encrypt(str.bytes) print("加密结果(base64):\(encrypted.toBase64()!)") //开始解密 let decrypted = try chiper.decrypt(encrypted) print("解密结果:\(String(data: Data(decrypted), encoding: .utf8)!)") } catch { }运行结果如下:
2,Rabbit
(1)基本介绍
- Rabbit 流密码是由 Cryptico 公司设计的,密钥长度 128 位,
- 最大加密消息长度为 264 Bytes,即 16 TB,若消息超过该长度,则需要更换密钥对剩下的消息进行处理。
(2)使用样例(iv 不是必需的):
do { let str = "欢迎访问 hangge.com" print("原始字符串:\(str)") let key = "hangge.com123456" print("key密钥:\(key)") //使用Rabbit加密模式 let chiper = try Rabbit(key: key.bytes) //开始加密 let encrypted = try chiper.encrypt(str.bytes) print("加密结果(base64):\(encrypted.toBase64()!)") //开始解密 let decrypted = try chiper.decrypt(encrypted) print("解密结果:\(String(data: Data(decrypted), encoding: .utf8)!)") } catch { }运行结果如下:
3,Blowfish
(1)基本介绍
- Blowfish 算法是一个 64 位分组及可变密钥长度的对称密钥分组密码算法,可用来加密 64 比特长度的字符串。
- Blowfish 算法具有加密速度快、紧凑、密钥长度可变、可免费使用等特点,已被广泛使用于众多加密软件。
- 由于 Blowfish 算法采用变长密钥,这在给用户带来极大便利的同时也存在隐患。由于算法加/解密核心在于密钥的选择和保密,但在实际应用中经常使用一些弱密钥对信息资源进行加密,导致存在着很大的安全隐患。
- Blowfish 同上文介绍的 AES 一样,也拥有多种加密模式:ECB、CBC、CFB、CTR、OFB、PCBC
(2)使用样例1:使用 ECB 模式
do { let str = "欢迎访问 hangge.com" print("原始字符串:\(str)") let key = "hangge.com123456" print("key密钥:\(key)") //使用Blowfish-ECB加密模式 let chiper = try Blowfish(key: key.bytes, blockMode: .ECB, padding: .pkcs7) //开始加密 let encrypted = try chiper.encrypt(str.bytes) print("加密结果(base64):\(encrypted.toBase64()!)") //开始解密 let decrypted = try chiper.decrypt(encrypted) print("解密结果:\(String(data: Data(decrypted), encoding: .utf8)!)") } catch { }运行结果如下:
(3)使用样例2:使用 CBC 模式
do { let str = "欢迎访问 hangge.com" print("原始字符串:\(str)") let key = "hangge.com123456" print("key密钥:\(key)") let iv = "12345678" print("密钥偏移量:\(iv)") //使用Blowfish-CBC加密模式 let chiper = try Blowfish(key: key.bytes, blockMode: .CBC(iv: iv.bytes), padding: .pkcs7) //开始加密 let encrypted = try chiper.encrypt(str.bytes) print("加密结果(base64):\(encrypted.toBase64()!)") //开始解密 let decrypted = try chiper.decrypt(encrypted) print("解密结果:\(String(data: Data(decrypted), encoding: .utf8)!)") } catch { }运行结果如下:
全部评论(0)