密码学——序列密码 序列线性复杂度 B-M算法 例题演示

目录

前言

B-M算法

文字描述

图片描述

例题(为了方便我不用latex公式)

课本例题1

课本例题2

课后习题5.8


前言

由于课本企图用世界上最精炼的文字描述这个算法的高深思想

以及我搜出来的CSDN博客,全部都完全不是人的只会CtrlC+CtrlV般的抄课本描述

而且且加上密码学本身的冷门性

导致没有一篇现有博客我看懂了B-M算法

还好B站讲解视频甚至也不多,但是好在有一个视频讲的很好。

在此感谢这个老哥,同时为了把密码学精神发扬光大(为了别再吃信息安全这坨,尤其是当你的老师根本不会讲课的时候),我希望我写下的东西能让大家渡劫。

附上参考文献:BM算法 15min速通_第二章序列密码3_哔哩哔哩_bilibili

B-M算法

文字描述

课本不到半张纸就把算法描述完了,真是太有实力辣!

图片描述

图来自上面的参考视频。

这张流程图真的就能很显然的讲明白,我真的搞不懂教材一张图不配,例题也不给出分析(当然例题分析要的纸更多)是想干什么。

我再给一张自己画的图(极简版)

计算过程大体是你知道d(n),去算f(n+1)和l(n+1),中间你可能还需要计算一个参量m。

如果得出了f(n+1),我们就需要知道:c1到cn是f函数的系数(牢记!!!这一点困扰了我很久),所以就可以计算下一个d,也就是d(n+1)。

然后有一个整体的判断:

计算过程主要是走左边这条路和中间这条路,右边这条路基本上只会在开头的计算才会出现。

例题

为了书写方便我有的地方没用latex公式

课本例题1

**初始化工作:**由题a0a1a2a3a4a5a6a7=10101111,n=0,f0=1,L0=0

第一次循环:n=0

计算d0,得出d0=a0=1,走右边的路。

n=0,而现在已知L0=0,那么进入最右边的路。

第二次循环:n=1

f1=1+x,那么c1=1(也就是x前面的系数)

计算d1,d1=a1+c1*a0=1,走右边的路。

因为L0=0<L1=1,那么m=0,走中间的路。(此时因为L列出现了非0的数,那么最右侧的路就可以跟我们说拜拜了)

第三次循环:n=2

f2=1,那么c1c2=00

计算d2=a2+c1*a1+c2*a0=1,走右边的路。

因为L0=0<L1=L2=1,那么m=0,走中间的路。

第四次循环:n=3

f3=1+x^2,那么c1c2c3=010

计算d3=a3+c1*a2+c2*a1+c3*a0=0,走左边的路(终于可以休息了)。

第五次循环:n=4

f4=1+x^2,那么c1c2c3c4=0100

计算d4=a4+c1*a3+c2*a2+c3*a1+c4*a0=0,走左边的路。

第六次循环:n=5

f5=1+x^2,那么c1c2c3c4c5=01000

计算d5=a5+c1*a4+c2*a3+c3*a2+c4*a1=1,走右边的路。

因为L1=L2=1<L3=L4=L5=2,那么m=2,走中间的路。

第七次循环:n=6

f6=1+x^2+x^3,那么c1c2c3c4c5c6=011000

计算d4=a4+c1*a3+c2*a2+c3*a1+c4*a0=0,走左边的路。

第八次循环:n=7

f7=1+x^2+x^3,那么c1c2c3c4c5c6c7=0110000

计算d5=a5+c1*a4+c2*a3+c3*a2+c4*a1=1,走右边的路。

因为L3=L4=L5=2<L6=L7,那么m=5,走中间的路。

因此本题答案为<1+x^3+x^4,4>

课本例题2

**初始化工作:**由题a0a1a2a3a4a5a6a7a8a9a10a11=111001111001,n=0,f0=1,L0=0

(垃圾课本a12中间少写了个1)

第一次循环:n=0

计算d0,得出d0=a0=1,走右边的路。

n=0,而现在已知L0=0,那么进入最右边的路。

第二次循环:n=1

f1=1+x,那么c1=1。

计算d1,d1=a1+c1*a0=0,走左边的路。

第三次循环:n=2

f2=1+x,那么c1c2=10。

计算d2,d2=a2+c1*a1+c2*a0=0,走左边的路。

第四次循环:n=3

f3=1+x,那么c1c2c3=100。

计算d3,d3=a3+c1*a2+c2*a1+c3*a2=1,走右边的路。

因为L0=0<L1=L2=L3=1,那么m=0,走中间的路。

(f4这里和书上答案的不一样,但是其余的结果完全一致,而且如果不用我的f4计算结果反而会不一致,所以不得不怀疑是书的问题。)

第五次循环:n=4

f4=1+x+x^3,那么c1c2c3c4=1010。

计算d4,d4=a4+c1*a3+c2*a2+c3*a1+c4*a0=1,走右边的路。

因为L1=L2=L3=1<L4=3,那么m=3,走中间的路。

第六次循环:n=5

f5=1+x^2+x^3,那么c1c2c3c4c5=01100。

计算d5,d5=a5+c1*a4+c2*a3+c3*a2+c4*a1+c5*a0=0,走左边的路。

第七次循环:n=6

f6=1+x^2+x^3,那么c1c2c3c4c5c6=011000。

计算d6,d6=a6+c1*a5+c2*a4+c3*a3+c4*a2+c5*a1+c6*a0=1,走右边的路。

因为L1=L2=L3=1<L4=L5=L6=3,那么m=3,走中间的路。

第八次循环:n=7

f7=1+x^2+x^4,那么c1c2c3c4c5c6c7=0101000。

计算d7,d7=a7+c1*a6+c2*a5+c3*a4+c4*a3+c5*a2+c6*a1+c7*a0=0,走左边的路。

第九次循环:n=8

f8=1+x^2+x^4,那么c1c2c3c4c5c6c7c8=01010000。

计算d8,d8=a8+c1*a7+c2*a6+c3*a5+c4*a4+c5*a3+c6*a2+c7*a1+c8*a0=0,走左边的路。

第十次循环:n=9

f9=1+x^2+x^4,那么c1c2c3c4c5c6c7c8c9=010100000。

计算d9,d9=a9+c1*a8+...+c9*a0=0,走左边的路。

第十一次循环:n=10

f10=1+x^2+x^4,那么c1c2c3c4c5c6c7c8c9c10=0101000000。

计算d10,d10=a10+c1*a9+...+c10*a0=0,走左边的路。

第十二次循环:n=12

f11=1+x^2+x^4,那么c1c2c3c4c5c6c7c8c9c10c11=01010000000。

计算d11,d11=a11+c1*a10+...+c11*a0=0,走左边的路。

因此本题答案为<1+x^2+x^4,4>

课后习题5.8

|---|----|-------------|-------|---|-------|
| n | dn | fn(x) | Ln(x) | m | fm(x) |
| 0 | 1 | 1 | 0 | | |
| 1 | 0 | 1+x | 1 | | |
| 2 | 0 | 1+x | 1 | | |
| 3 | 1 | 1+x | 1 | 0 | 1 |
| 4 | 1 | 1+x+x^3 | 3 | 0 | 1 |
| 5 | 0 | 1+x^2+x^3 | 3 | 3 | 1+x |
| 6 | | 1+x^2+x^3 | 3 | | |

**初始化工作:**由题a0a1a2a3a4a5=111001,n=0,f0=1,L0=0

第一次循环:n=0

计算d0,得出d0=a0=1,走右边的路。

n=0,而现在已知L0=0,那么进入最右边的路。

第二次循环:n=1

f1=1+x,那么c1=1。

计算d1,d1=a1+c1*a0=0,走左边的路。

第三次循环:n=2

f2=1+x,那么c1c2=10。

计算d2,d2=a2+c1*a1+c2*a0=0,走左边的路。

第四次循环:n=3

f3=1+x,那么c1c2c3=100。

计算d3,d3=a3+c1*a2+c2*a1+c3*a2=1,走右边的路。

因为L0=0<L1=L2=L3=1,那么m=0,走中间的路。

(f4这里和书上答案的不一样,但是其余的结果完全一致,而且如果不用我的f4计算结果反而会不一致,所以不得不怀疑是书的问题。)

第五次循环:n=4

f4=1+x+x^3,那么c1c2c3c4=1010。

计算d4,d4=a4+c1*a3+c2*a2+c3*a1+c4*a0=1,走右边的路。

因为L1=L2=L3=1<L4=3,那么m=3,走中间的路。

第六次循环:n=5

f5=1+x^2+x^3,那么c1c2c3c4c5=01100。

计算d5,d5=a5+c1*a4+c2*a3+c3*a2+c4*a1+c5*a0=0,走左边的路。

因此线性综合解为<1+x^2+x^3,3>。

然而,以下是老师给的参考答案,从f5开始不一样。

认真算了几遍,我还是坚持我的答案。而且就算不从计算的角度来看,f5比f4多了一个x^4,但是f3是1+x,那么乘上一个x^n(无论是不是x^1)他都不可能只会冒出来一个x^4,一定还会多出来或者消除一个非x^4的项。所以现在打死我都不信这答案是对的。

更正:现在发现,这题的序列a就是课本例题2的序列,我释怀地笑了。

相关推荐
蒙奇D索大9 小时前
【数据结构】图论核心应用:关键路径算法详解——从AOE网到项目管理实战
数据结构·笔记·学习·考研·算法·图论·改行学it
学c语言的枫子9 小时前
数据结构——Dijkstra算法
数据结构·算法
Asmalin10 小时前
【代码随想录day 29】 力扣 860.柠檬水找零
算法·leetcode·职场和发展
wan5555cn10 小时前
AI视频生成技术:从想象到现实的视觉革命
人工智能·笔记·深度学习·算法·音视频
小狗照亮每一天11 小时前
【菜狗学聚类】序列嵌入表示、UMAP降维——20250930
算法·分类·聚类
彩云回13 小时前
支持向量机(SVM)
算法·机器学习·支持向量机
Asmalin18 小时前
【代码随想录day 29】 力扣 135.分发糖果
算法·leetcode·职场和发展
微笑尅乐18 小时前
多解法详解与边界处理——力扣7.整数反转
算法·leetcode·职场和发展
夏鹏今天学习了吗18 小时前
【LeetCode热题100(31/100)】K 个一组翻转链表
算法·leetcode·链表
薰衣草233318 小时前
力扣——位运算
python·算法·leetcode