线性反馈移位寄存器(LFSR,Linear Feedback Shift Register)
移位寄存器
该寄存器可以保存一个二进制位集。
两种方法将位加载到寄存器中:①并行加载,位同时加载 ②使用移位寄存器来加载。
在移位时,每个位均往右移一位,最右边的位被丢弃,而最左边的位被输入位代替。
线性反馈移位寄存器
最简单的反馈移位寄存器。
一般由两部分组成:①移位寄存器 ②反馈函数
每次移位寄存器中所有位右移一位,新的最左端的位根据寄存器中某些位计算得到,由寄存器某些位计算最左端的部分被称为反馈函数。
反馈函数是寄存器中某些位简单异或,这些位叫做抽头,有时也叫Fibonacci配置。
移位寄存器是由位组成的序列,其长度用位来表示,如果它是n位长,则称其为n级移位寄存器。
移位寄存器输出的一个位常常是最低有效的位。
移位寄存器的周期是指输出序列从开始到重复时的长度。
一个n位移位寄存器的当前存储内容能够处于2^n-1个状态中的任意一个。所以理论上,n级LFSR的输出序列在重复之前能够产生2^n-1位长的伪随机序列(是2^n-1而不是2^n,是因为全0的状态将使LFSR无止境地输出0序列)。
只有特定抽头序列的LFSR才能循环地遍历所有2^n-1个内部状态,且此时输出序列被称为m序列。
为了使LFSR生成最大周期序列,其生成多项式(由抽头序列加上常数1形成的多项式)必须是本原多项式,多项式的阶数为移位寄存器的级数。
选择一个15次以上的不可约多项式,编写一个线性反馈移位寄存器。验证生成序列的周期。
def lfsr(ai, t):array_init = ai #初始位tap_init = t #抽头tap = tap_init[0:]tap_len=len(tap) #抽头长度array_init_bin = '{:0{taplen}b}'.format(array_init,taplen=tap_len) #把初始位转化为二进制 ‘:0{taplen}b’中‘tapen’为占位符#print("二进制为:",array_init_bin)array_init_bin=list(array_init_bin)#其实应该可以直接array_init_bin=list(array_init_bin)array_new = '0' * len(array_init_bin) #创建变量与array_init_bin长度相同的字符串array_new = list(array_new) #将字符串转换为列表for i in range(len(array_init_bin)):array_new[i] = str(array_init_bin[i])#print(array_new[0])with open('series.txt', 'a+') as f: # 将序列写入txtf.write(str(array_new[0]) ) #array_new[0]为输出序列xorNum = int(array_new[0])for k in range(1, len(array_init_bin)):if (tap[k] == '1'):xorNum ^= int(array_new[k])for i in range(len(array_init_bin)-1): #寄存器右移,输入反馈部分j = i + 1array_new[i] = str(array_new[j])array_new[len(array_init_bin) - 1]=str(xorNum)array_new = ''.join(array_new)return int(array_new, 2) #将移位寄存器转换成整数tap=input("请输入抽头:")
init=pow(2,len(tap))-1 #初始的位为2^n-1
primary = init
tt=1 #初始周期为1
#print("序列密码为:")
for i in range(4294967299): #计算移位寄存器的周期init = lfsr(init, tap)if(init!=primary):tt+=1else:break
print('序列周期为:',tt)
线性反馈移位寄存器(LFSR,Linear Feedback Shift Register)相关推荐
- 线性反馈移位寄存器LFSR(斐波那契LFSR(多到一型)和伽罗瓦LFSR(一到多型)|verilog代码|Testbench|仿真结果)
线性反馈移位寄存器LFSR 一.前言 二.LFSR简介 三.斐波那契LFSR和伽罗瓦LFSR 3.1 斐波那契LFSR 3.1.1 斐波那契LFSR 3.1.2 verilog代码 3.1.3 Tes ...
- 四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)
移位寄存器总结 一.前言 二.简单循环左移/右移/双向移位寄存器 2.1 简单循环左移/右移/双向移位寄存器 2.2 verilog代码 2.3 Testbench 2.4 仿真结果 三.逻辑移位与算 ...
- 线性反馈移位寄存器(LFSR) ______FPGA产生基于LFSR的伪随机数
FPGA产生基于LFSR的伪随机数 https://blog.csdn.net/qq_34070723/article/details/89736772 1.概念 通过一定的算法对事先选定的随机种子( ...
- 线性反馈移位寄存器-LFSR
LFSR badmonkey的博客 最开始了解到LFSR的时候是在学习MT19937伪随机数生成器的时候,当时也是初步了解.也没有用代码实现过,最近做了几道相关的题,在这里记录一下. 原理 证明过程不 ...
- LFSR(线性反馈移位寄存器, Linear-feedback shift register
1 移位寄存器 移位寄存器(Shift Register,SR)曾在SM4中提到过,是指有若干个寄存器排成一行,每个寄存器中都存储着一个二进制数(0或1).移位寄存器每次把最右端(末端)的数字输出,然 ...
- 详解线性反馈移位寄存器(LFSR)
转载于(九)详解线性反馈移位寄存器(LFSR) 文章目录 LFSR的由来 LFSR具体内容 对LFSR的密钥流攻击 延伸 书籍推荐 LFSR的由来 1. 移位寄存器: 移位寄存器(ShiftRegis ...
- HDLBits 系列(21)LFSR(线性反馈移位寄存器)
目录 5 bit LFSR 3 bit LFSR 32 bit LFSR 5 bit LFSR A linear feedback shift register is a shift register ...
- 序列密码体制(python随机数密码,RC4,线性反馈移位寄存器
目录 概念: Vernam密码技术(序列密码的起源 伪随机数 线性反馈移位寄存器: 线性反馈移位寄存器LFSR 概念: 明文按一定长度分组后表示成一个序列,称为明文流.加密时,由种子密钥通过密钥流生产 ...
- 流密码(一)同步流密码、自同步流密码以及线性反馈移位寄存器
正式进入密码学领域,发现密码学更像是一门数学,主要是对数论.近世代数的简单应用以及运用在算法中,常常结合模运算以及数字逻辑运算. 流密码的第一部分主要是比较了同步流密码和自同步流密码,其中自同步流密码 ...
- 线性反馈移位寄存器(LSFR)
线性反馈移位寄存器(LSFR) 流密码的流密钥产生器可以通过线性驱动和非线性组合两部分来实现.而线性驱动部分可以由线性反馈移位寄存器(LFSR)来实现. 线性反馈移位寄存器(LFSR):通常由移位寄存 ...
最新文章
- 在?三缺一,来斗个地主——肝个斗地主案例(java)
- [BZOJ3093][Fdu校赛2012] A Famous Game(不等概率)
- Qt生成的exe中为什么会带有不该有的盾牌?
- 怎么取消自动格式化_iPhone自动扣费怎么取消?App Store、微信、支付宝关闭自动扣费教程...
- Python使用pip自动升级所有第三方库
- android java调用c_Android JNI简单实例(android 调用C/C++代码)
- linux shell脚本编程笔记(三): 三种引号的区别
- mysql5.7 datetime 默认值为‘0000-00-00 00:00:00‘值无法创建问题解决
- Android 回调接口是啥,回调机制详解(zhuan)
- LabVIEW升级图像识别功能
- Android源码下载编译(TI)
- 小白如何快速入门数学建模
- Linux 复制文件
- C#_.NET 类库简介
- 数据不平衡分类问题 代价矩阵 损失函数
- jQuery图片播放插件ColorBox使用方法
- 安卓之旅第七站--实战演练之快给小宝宝买装备吧
- 详解Java 12新特性:switch表达式
- [日推荐] 『KORJO母爱小空间』妈妈带宝宝出门再也不用愁啦!
- ArcGIS 字段值替换