首页 > 编程知识 正文

设计一种序列密码,环序列二密码

时间:2023-05-05 19:21:22 阅读:20702 作者:3943

一、 算法原理

1.概念引入

生成和特征多项式

2.BM算法流程

二.编程思路

1 .编程思路:

BM算法的总体流程比较清晰,其中包含一些核心判断: fnx能否生成序列a的前n 1位,每个l值是否都相等,以及l值不均匀时,m-lm和n-ln的相对编程分别通过generable(n,f_n,ln,sequence )函数、l_all_equal(l ) l )函数和循环扫描来查找m,并确定m-lm和n-ln的大小

编程时决定f_n(x )时,表现形式有烦恼。 首先考虑的是在一维阵列中保存当前控制盘f_n ) x )的各系数。 发现在算法流程2 ) 2中使用前一个轮的f_m ) x ),最终以二维阵列表示f_n ) x )。 其中,第一维表示不同的车轮,第二维表示该车轮的下方

x的幂和fnx的乘法相当于将支持fnx的多项式系数列表向右移位x的幂次,并从进行多项式加法运算时使用的多项式系数列表的下标中减去对应的幂次(注意下标越界问题)

因为是二元领域中的运算,所以需要对对应的系数进行型2运算。

2 .关键函数: generable(n,f_n,ln,sequence ) :

传递的参数:当前倒圆角下n的可取值、存储每个倒圆角的最低次多项式的二维数组f_n、当前倒圆角的阶数ln、序列sequence

实现代码如下:

3 .算法流程图:

三、 结果截图

四、 代码

f_n[n]为a的第n 1项defgenerable(n,f_n, 判断是否可以生成ln,sequence(:a=0#理论计算值ifln==0: a=0else : foriinrange ) ln ) : ) ci=f_n(n ) L(n ) print(n ) n,' okkkkkk ',ln,f_n[n] ) returntrueelse3360#print(n, ' nononono nt f _ n [ n ] (返回假# BM算法defBM(sequence ) :f_n=[0forIinrange(len ) sequence forIinrange (顺序) len ) sequence初始值F0=1l=[0forIinrange(len (顺序)1) ] #每个回合的最低多项式阶foriinrange (len ) sequence ) 3330 记录f_n的sequence ) : #算法流1财富(len ) sequence ) : f _ n [ i1 ] [ j ]=f _ n [ I ] [ j ] l [ i1 continnning 2(1) print(execute2(1) ) f_n ) ) 1f_n ) I1 )=1L ) I1 )=I1else3360#2)2) j=il i1-l [ I l[j] ) ifl [ j ] l [ I ] : m=jbreakj-=1if (m-l [ m ]=I-l [ I ] ) :#2(2) )1) #打印) '执行2 3360 l[i 1] 1) : f _ n [ i1 ] [ k ]=(f _ n [ I ] [ k ] f _ n [ m ] [ k-(m-l [ m ]-il [ I ] ) ) )2else3360# ) l[i 1] 1) : f _ n [ i1 ] [ k ]=(f _ n [ I ] [ k-(I-l [ I ]-ml [ m ] ) ] f_n[m][k] ) % 2返回f _ n I ) :result=''j=L[I] 返回whilej=03360if_ )=0: ifj==0: result='1' else : result=' x ^ ' str (j (=1return result ) (03360-1 foriinsequence 3360 result.append (int (I ) ) returnresultif _ _ name _=' _ _ main _ ' 3330 ' 000111101010101010000000000010101010101010 ' 101011101010010010010010010101010101010101110010 ' ] forsinseq : f _ n,L=BM(seq_to_list ) s ) print (打印序列) s

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。