100行代码手把手带你实现Feisitel加密算法

简介

Feistel 加密算法,或者叫做 Feistel 网络,是一种块加密(block cipher)模型,很多常见的加密算法都具有 Feistel 结构,如 DES、blowfish 等。

Feistel 将明文分割成固定大小(block size)的块(如 32bit、64bit),然后对于每个块进行若干轮操作,每轮操作需要用到一个 key,因此总计需要循环轮数个 key。解密时需要用相同的 keys,因此这是一种对称加密算法。

加密步骤

  1. 将明文转换为 8-bit 二进制形式
  2. 根据块大小(block size)分割成若干个数据块,不足整数块时需要加 padding
  3. 生成轮数(rounds)个 key 的 keys 数组
  4. 对于每个数据块进行若干轮操作,具体如下:
  • 在每轮操作中都将数据块分成相等的左右两部分(L1, R1)
  • 将右半部分(R1)与keys[n]进行加密函数f运算,记为f1
  • 然后将f1与左半部分进行异或(XOR)操作的结果作为下一轮输入的左半部分(L2)
  • 将本轮左半部分(L1)作为下一轮输入的右半部分(R2)
  • 下一轮的输入为L2 + R2, 再进行下一轮操作
  • 在最后一轮结束后将左半部分(Ln)和右半部分(Rn)对调(这样可以使用同一个循环进行加密和解密)

解密步骤

  1. 将密文使用相同的 keys 进行与加密过程相同的循环,不过 key 的顺序与加密时相反(加密时使用 key[1], key[2], ..., key[n], 解密时使用 key[n], key[n-1], ..., key[1])
  2. 组合数据块并按照 8bit 进行分割
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值