返回 导航

Swift

hangge.com

Swift - 第三方加密库CryptoSwift使用详解4(ChaCha20、Rabbit、Blowfish)

作者:hangge | 2017-12-08 08:10

七、其他加密算法

CryptoSwift 还提供了 ChaCha20RabbitBlowfish 这三种加密算法,它们同上文介绍的 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 一样,也拥有多种加密模式:ECBCBCCFBCTROFBPCBC

(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)

回到顶部