学习笔记:Feistel算法

Feistel建议使用乘积密码的概念来逼近理想分组密码,他建议密码交替地使用代替和置换。

使用Feistel密码结构,明文分组被分为等长的LE,RE两部分,对这两部分数据进行n次轮换迭代后组合成密文。每一轮得到的输出就是下一轮的输入。

加密方法是:

第一轮次:
LE_{1}=RE_{0}

RE_{1}=LE_{0}\bigoplus F\left \{ RE_{0},K_{0} \right \}

……

第n轮次:

LE_{n}=RE_{n-1}

RE_{n}=LE_{n}\bigoplus F\left \{ RE_{n-1},K_{n} \right \}

最终得到输出密文为:RE_{n}||LE_{n}

其中Ki是每一轮次的子密钥,是由整个密钥K推导出的;轮函数F是w位长的右半分组和y位长的子密钥的函数,其输出结果是一个w位长的值。

解密算法:

Feistel的解密算法其实就是对其加密算法的逆推导

Feistel加密算法得到的结果输出其实是RE_{n}||LE_{n},则新的密文为LD_{0}=RE_{n},RD_{0}=LE_{n}

从第一轮迭代开始算,即

LD_{1}=RE_{n-1}=LE_{n}=RD_{0}

RD_{1}=LE_{n-1}=RE_{n}\bigoplus F\left \{ RE_{n-1},K_{n} \right \}=RE_{n}\bigoplus F\left \{LE_{n},K_{n} \right \}=LD_{0}\bigoplus F\left \{RD_{0},K_{n} \right \}

 ……

直到第n轮次:

LD_{n}=RE_{0}=LE_{1}=RD_{n-1}

RD_{n}=LE_{0}=RE_{1}\bigoplus F\left \{ RE_{0},K_{1} \right \}=LD_{n-1}\bigoplus F\left \{ LE_{1},K_{1} \right \}=LD_{n-1}\bigoplus F\left \{ RD_{n-1},K_{1} \right \}

最终结果将左右两个分组置换,得到输出RD_{n}||LD_{n}=LE_{0}||RE_{0}即为原明文

从Feistel的加密和解密可以看出,他的加密和解密过程除了每一轮次所用的子密钥不同外,其他过程都是相同的,这两个过程所使用的子密钥顺序是相反的

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Feistel算法是一种对称加密算法,它通过迭代轮次的方式,将明文分成两部分,然后进行一系列的轮函数运算和异或操作,最终得到加密后的密文。 具体实现Feistel算法的步骤如下: 1. 首先,需要确定算法的轮数n和密钥key。 2. 将明文分成两个部分L和R,每个部分的长度为明文长度的一半。 3. 迭代n轮,每轮的过程相同: a. 将R的内容保存在临时变量temp中。 b. 使用轮函数F对R和密钥key进行计算得到一个临时结果。 c. 将L与临时结果进行异或操作,并将结果存入R中。 d. 将temp的内容存入L中。 4. 在最后一轮迭代结束后,将L和R进行合并,得到加密后的密文。 Feistel算法的轮函数F通常使用的是可逆函数,如DES中的S盒置换等。该函数具有扩散性和混乱性,使得加密过程具有强大的安全性。同时,Feistel算法也具有解密的可逆性,只需要将密钥和轮函数逆向应用即可得到原始明文。 Feistel算法的实现可以使用各种编程语言进行,例如Python、C++等。在编程实现过程中,需要注意将明文和密钥转换为二进制形式,然后按照上述步骤进行迭代运算,并得到加密后的二进制结果。最后再将二进制结果转换为十六进制或其他形式的字符串,作为最终的密文输出。 总之,Feistel算法通过迭代运算和异或操作,实现了对称加密的功能。它的设计思想简单、安全性较高,被广泛应用于各类加密算法中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

榴莲 蛋挞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值