密码学中的 Blowfish 算法2024 年 8 月 28 日 | 阅读 19 分钟 Blowfish 是一种对称的、64 位块密码,其长度可变。 1993 年,Bruce Schneier 创建了它作为对久负盛名的“数据加密标准”(DES)和“国际数据加密算法”(IDEA)加密技术的快速、免费的替代方案,因为它是一个“通用算法”。 Blowfish 未经专利,比 DES 和 IDEA 快得多,并且可以免费用于所有目的。 但是,由于其短块大小被认为不安全,因此它无法完全取代 DES。 其后继者 Twofish 解决了安全问题,它使用了 128 位的更高块大小。 尽管如此,当今市场上的许多密码套件和加密解决方案仍在使用 Blowfish 算法,因为完整的 Blowfish 加密从未被破解。 识别 blowfishBlowfish 具有 64 位块大小,密钥长度可以是 32 位或 448 位。 它有 16 次迭代,类似于 Feistel,并且每次迭代都在一个被分成两个 32 位字的 64 位块上运行。 Blowfish 使用单个加密密钥来编码和解码数据。 Blowfish 算法的两个主要部分如下: 数据加密:数据加密使用一个 16 轮的 Feistel 网络,每一轮包括一个依赖于密钥的置换和一个依赖于密钥和数据的替换。 替换方法与大型的、依赖于密钥的 S 盒结合使用,以在 Blowfish 中加密数据。 所有加密过程都包括对 32 位字和异或的添加,这是一种逻辑门。 密钥扩展和子密钥:在整个密钥扩展过程中,最大 448 位的密钥被扩展成几个子密钥数组,总共 4,168 字节。 Blowfish 算法大量使用子密钥,这取决于它们。 在进行任何加密或解密之前,会预先计算这些子密钥。 Blowfish 中的 P 数组由四个 32 位 S 盒组成,每个 S 盒有 256 个条目,以及 18 个 32 位子密钥。 以下是子密钥的计算:
为了产生所有子密钥和过程,Blowfish 总共执行 521 次,使用大约 4 千字节 (KB) 的数据。 Blowfish 加密和解密技术的示例假设将使用 Blowfish 对消息“Hi world”进行加密。 步骤如下:
图片 Blowfish 的优点Blowfish 是目前使用中速度最快、最小的块密码之一,它使用对称加密密钥将数据转换为密文。 30 多年前,它最初被创建,至今仍被广泛使用,因为它具有以下优点:
Blowfish 的缺点使用 Blowfish 进行加密有各种缺点,例如:
Blowfish 的使用Blowfish 适用于各种用途,例如:
许多知名产品都使用 Blowfish,包括 CryptoDisk、PasswordWallet、Access Manager、Symantec NetBackup 和 SplashID。 电子商务公司和社交媒体平台也广泛使用 Blowfish 来保护用户数据。 下面是一个演示 Blowfish 加密的 Java 程序 输出 subkey 1: 8e846390 subkey 2: a295c40e subkey 3: b9a28336 subkey 4: 2446bf99 subkey 5: 0eb2313a subkey 6: 0ea9fd0d subkey 7: a295f380 subkey 8: cb78a054 subkey 9: ef9328fe subkey 10: 1fe6dfaa subkey 11: 14ef6fd7 subkey 12: 13dfc0b1 subkey 13: 6a1720af subkey 14: ee4a9c00 subkey 15: 953fdcad subkey 16: 9271c5ca subkey 17: 38addcc1 subkey 18: ae4f37c6 -----Encryption----- round 0: 77b3ba639cb0353b round 1: 0cc7d63fd5267e6d round 2: c799728ab5655509 round 3: 69612395e3dfcd13 round 4: f3f5b74b67d312af round 5: 52023d4efd5c4a46 round 6: 5b785180f097cece round 7: cc946d119000f1d4 round 8: 6af47a4b230745ef round 9: 9fb82cc57512a5e1 round 10: 1106c1ab8b574312 round 11: 7d7a616502d9011a round 12: 81e9ce71176d41ca round 13: 9727e50a6fa35271 round 14: eb761e34021839a7 round 15: 0599d9367907dbfe Cipher Text: d748ec383d3405f7 以下是一个演示如何解码数据的 Java 程序 输出 subkey 1: 8e846390 subkey 2: a295c40e subkey 3: b9a28336 subkey 4: 2446bf99 subkey 5: 0eb2313a subkey 6: 0ea9fd0d subkey 7: a295f380 subkey 8: cb78a054 subkey 9: ef9328fe subkey 10: 1fe6dfaa subkey 11: 14ef6fd7 subkey 12: 13dfc0b1 subkey 13: 6a1720af subkey 14: ee4a9c00 subkey 15: 953fdcad subkey 16: 9271c5ca subkey 17: 38addcc1 subkey 18: ae4f37c6 -----Decryption----- round 17: 3ab5e5667907dbfe round 16: fdd297bb021839a7 round 15: 82529d676fa35271 round 14: ec939d1a176d41ca round 13: e14063bd02d9011a round 12: 66cd65508b574312 round 11: 37e82a387512a5e1 round 10: 8fe62e7e230745ef round 9: 1f04e6309000f1d4 round 8: 3624ea12f097cece round 7: c546e12ffd5c4a46 round 6: ed76301e67d312af round 5: bbd76433e3dfcd13 round 4: f160c1f4b5655509 round 3: 2512b60dd5267e6d round 2: 6f86e1389cb0353b Plain Text: 123456abcd132536 Blowfish 算法的优点和缺点
Blowfish 算法的用途
下一主题密码学中的 SHA 算法 |
我们请求您订阅我们的新闻通讯以获取最新更新。