DES算法(Sbox)
- 格式:doc
- 大小:65.50 KB
- 文档页数:26
DES算法的实现及安全性分析专业班级:计算机科学与技术1班姓名:廖孜孜完成日期: 2015年5月17日引言如果一个密码体制的加密密钥等于脱密密钥,或者其中一个很容易推出另一个,则称此密码体制为单密钥密码体制,也称为对称密码体制或传统密码体制。
最具有代表性的近代传统密码体制是DES(数据加密标准)。
为了适应社会对计算机数据安全保密越来越高的要求,美国国家标准局(NBS)于1973年向社会公开征集一种用于政府部门及民间进行计算机数据加密算法,许多公司提出了自己的加密算法,最后选中了IBM公司提出的一种加密算法。
经过一段时间的试用与征求意见,美国国家标准局于1977年公布了由IBM 公司研制的一种加密算法,批准把它作为非机要部门使用的数据加密标准,简称DES,DES是Data Encryption Standard的缩写。
自从公布以来,它一直超越国界成为国际上商用保密通信和计算机通信的最常用的加密算法。
原先规定使用期10年,可能是DES尚未受到严重的威胁,更主要的是新的数据加密标准还没有完成,或意见未一致,所以当时的美国政府宣布延长它的使用期。
因而DES超期服役了很长时间,20年来它一直活跃在国际上保密通信的舞台上,扮演了十分突出的角色。
进入20世纪九十年代后以色列的密码学家Shamir 等人提出了一种“差分分析法”,以后日本人又提出类似的方法,这才正式有一种称得上对它的攻击的方法。
严格地说,Shamir 的“差分分析法”也只有理论上的价值,至少目前为止是这样的。
又如,后来的“线性逼近法”,它是一种已知明文攻击法,需要2的43次方也就是4.398×10的12次方对明文-密文对,在这样强的要求条件下,有十多台工作站协同作战,还需要十天的时间。
在这以前已有人建议造专用装置来对付它,其基本想法无非是借用硬件来实现对所有密钥的遍历搜索。
当时估计一天可以搜索到一个密钥。
技术的进步使得搜索的时间进一步缩短,使DES受到了威胁,但DES毕竟辉煌过。
des算法的产生过程及具体计算步骤DES(Data Encryption Standard)是一种对称加密算法,由IBM公司于20世纪70年代初开发。
它是最广泛使用的加密算法之一,已经被广泛应用在各种领域中,包括金融交易、电子邮件、VPN等。
DES算法的产生过程可以分为以下几个步骤:1. 密钥生成——DES算法使用56位的密钥,其中包括8位的奇偶校验位。
首先,需要从用户输入的密钥中移除奇偶校验位,并通过将其转换为64位二进制形式来扩充密钥。
2. 初始置换——使用初始置换表(IP表)将64位的明文块进行置换,将其分为左右两个32位的块,作为下一步的输入。
3. 迭代过程——DES算法使用了16轮的迭代过程,每一轮包括以下步骤:a. 扩展置换——使用扩展置换表(E表)将右侧的32位块扩展为48位。
这样可以保证每轮迭代都有一定程度的扩散性。
b. 密钥加密——使用子密钥将扩展后的右侧32位块与左侧32位块进行异或运算。
c. S盒代换——将异或运算结果分为8个6位的块,并使用S盒对每个块进行代换。
DES算法使用了8个不同的S盒,每个S盒有4行16列,用于将输入的6位块映射为4位的输出。
d. P盒置换——将代换结果通过一个置换表(P表)进行置换,从而得到32位的输出。
e. 左右交换——将上一步的右侧32位块与上一轮的左侧32位块进行交换,作为下一轮迭代的输入。
4. 逆初始置换——使用逆初始置换表(IP^-1表)将16轮迭代后的结果进行逆置换,得到最终的加密结果。
DES算法的计算步骤如下:1. 输入明文和密钥,将明文和密钥都转换为二进制形式。
2. 执行初始置换,将64位的明文块转换为两个32位的块(左侧和右侧)。
3. 进入迭代过程,执行16轮的迭代。
每轮迭代都包括扩展置换、密钥加密、S盒代换、P盒置换和左右交换。
4. 执行逆初始置换,将16轮迭代后的结果转换回64位的密文块。
5. 输出加密结果。
DES算法的具体计算步骤请参考下面的内容:1. 密钥生成:- 输入密钥,移除奇偶校验位。
DES算法详细介绍DES(Data Encryption Standard),即数据加密标准,是一种对称密钥加密算法,由IBM公司于1975年研制。
DES算法的设计思想是通过使用56位的密钥对64位的明文进行加密,得到64位的密文。
同时,利用相同的密钥可以对密文进行解密,得到原始的明文。
1.首先,将64位的明文分割成左右两个32位的部分,分别称为L0和R0。
2.接着,重复进行16轮的加密操作。
在每一轮中,右边的32位部分Rn会作为下一轮的左边部分Ln+1的输入。
3. 在每一轮中,Rn经过扩展变换(Expansion Permutation)和异或运算,与轮密钥Kn进行异或运算,得到48位的输出。
然后,将这48位的输出经过S盒(Substitution Box)代替(Substitution)和P盒(Permutation Box)置换,得到32位的输出。
将这32位的输出与左边的32位部分Ln进行异或运算,得到右边的32位部分Rn+14.最后一轮结束后,将最后的输出L16和R16进行交换,并将它们合并成一个64位的输出,即密文。
DES算法中的核心组件是S盒,其作用是将输入的6位转换为4位的输出。
S盒是由8个不同的4x16的盒子组成,每个盒子完成从输入到输出的映射。
每个S盒通过6位输入中的前后两位选定对应的盒子行号和中间4位选定的盒子列号,然后将该行和列对应的值输出,将其转换为4位输出。
这样,每个S盒都可以通过4位选择的索引实现16种可能的映射。
在DES算法中,密钥长度为64位,但由于其中的8个位作为奇偶校验位而被忽略,因此实际有效的密钥长度为56位。
在加密过程中,使用密钥生成16个48位的子密钥,每个子密钥仅使用56位密钥中的不同的48位。
为了增加安全性,DES中的每个子密钥都通过将一部分密钥以及一部分已生成的子密钥作为输入,经过置换、循环左移、选择等操作生成。
然而,由于DES算法的密钥长度较短,易受到密码分析方法的攻击。
des 加密object参数DES加密算法是一种常用的对称加密算法,它可以对数据进行高效安全的加密和解密。
本文将从DES加密算法的原理、应用场景和优缺点等方面进行介绍和分析。
一、DES加密算法的原理DES(Data Encryption Standard)是一种对称加密算法,它使用相同的密钥进行加密和解密。
DES算法的核心是密钥的管理和运算方法。
它将明文数据分成64位的数据块,并通过一系列的加密轮次和运算来加密数据。
DES算法的加密过程包括初始置换、16轮的Feistel运算和最终置换等步骤。
在DES加密算法中,密钥起到了至关重要的作用。
密钥长度为64位,实际使用中通常采用56位的有效密钥,而其他8位用于奇偶校验。
DES算法的强度主要取决于密钥的长度,因此密钥的安全性非常重要。
为了增强DES算法的安全性,可以采用3重DES (Triple DES)算法,即对数据进行三次DES加密。
二、DES加密算法的应用场景DES加密算法在信息安全领域得到了广泛应用。
以下是一些常见的应用场景:1. 网络数据传输:在互联网上,数据的安全传输是非常重要的。
DES加密算法可以对敏感数据进行加密,确保数据在传输过程中不被窃取或篡改。
2. 数据库加密:对于存储在数据库中的敏感数据,如用户密码、银行账户信息等,可以使用DES加密算法进行加密,确保数据在存储过程中的安全性。
3. 文件加密:对于一些重要的文件,如商业机密、个人隐私等,可以使用DES加密算法对文件进行加密,防止未经授权的访问。
4. 移动通信:在移动通信中,如手机通话、短信等,可以使用DES 加密算法对通信内容进行加密,增强通信的安全性。
三、DES加密算法的优缺点DES加密算法作为一种经典的加密算法,具有以下优点和缺点:1. 优点:- 安全性高:DES算法采用了复杂的运算和多轮加密,具有较高的安全性,难以被破解。
- 速度快:DES算法的运算速度较快,适用于大量数据的加密和解密操作。
des工作原理乘积变换
DES(Data Encryption Standard)的工作原理是通过一系列的置换、替换、移位和异或操作来实现数据加密和解密。
具体的工作步骤如下:
1. 密钥生成:根据用户输入的密钥,通过置换和截取得到16个子密钥。
2. 初始置换(IP):将输入的明文数据按照预定的规则重新排列。
3. 轮函数:将输入的数据分为左右两部分,每一轮的计算都是对右半部分进行操作。
包括扩展置换(E盒扩展)、与子密钥的异或运算、S-Box替换、P-Box置换。
4. 16轮迭代:将轮函数的输出与左半部分进行异或运算,并将左半部分和右半部分交换位置,进行下一轮迭代。
5. 末置换(FP):将最后一轮迭代后的结果进行最后的置换操作,得到密文输出。
解密过程与加密过程相似,只是将子密钥的使用顺序反过来,即先使用第16个子密钥,最后使用第1个子密钥。
乘积变换(P-Box置换)是DES中的一个关键步骤。
它通过改变数据位的位置来增加密钥的影响范围,从而增强了加密的
强度。
具体工作原理是将输入的32位数据按照固定的置换规则重新排列,得到输出的32位数据。
每一位输出数据的值都与输入数据的一些位有关,具体的对应关系由置换规则确定。
DES算法代码及实验报告DES算法(Data Encryption Standard,数据加密标准)是一种对称密钥加密算法,是密码学中最为经典的算法之一、DES算法的核心是Feistel结构,通过将明文分成多个块,然后对每个块进行一系列的置换和替换操作,最后得到密文。
本文将给出DES算法的代码实现,并进行实验报告。
一、DES算法的代码实现:以下是使用Python语言实现的DES算法代码:```pythondef str_to_bitlist(text):bits = []for char in text:binval = binvalue(char, 8)bits.extend([int(x) for x in list(binval)])return bitsdef bitlist_to_str(bits):chars = []for b in range(len(bits) // 8):byte = bits[b * 8:(b + 1) * 8]chars.append(chr(int(''.join([str(bit) for bit in byte]), 2)))return ''.join(chars)def binvalue(val, bitsize):binary = bin(val)[2:] if isinstance(val, int) elsebin(ord(val))[2:]if len(binary) > bitsize:raise Exception("Binary value larger than the expected size.")while len(binary) < bitsize:binary = "0" + binaryreturn binarydef permute(sbox, text):return [text[pos - 1] for pos in sbox]def generate_round_keys(key):key = str_to_bitlist(key)key = permute(self.permuted_choice_1, key)left, right = key[:28], key[28:]round_keys = []for i in range(16):left, right = shift(left, self.shift_table[i]), shift(right, self.shift_table[i])round_key = left + rightround_key = permute(self.permuted_choice_2, round_key)round_keys.append(round_key)return round_keysdef shift(bits, shift_val):return bits[shift_val:] + bits[:shift_val]def xor(bits1, bits2):return [int(bit1) ^ int(bit2) for bit1, bit2 in zip(bits1, bits2)]def encrypt(text, key):text_bits = str_to_bitlist(text)round_keys = generate_round_keys(key)text_bits = permute(self.initial_permutation, text_bits)left, right = text_bits[:32], text_bits[32:]for i in range(16):expansion = permute(self.expansion_table, right)xor_val = xor(round_keys[i], expansion)substitution = substitute(xor_val)permut = permute(self.permutation_table, substitution)temp = rightright = xor(left, permut)left = tempreturn bitlist_to_str(permute(self.final_permutation, right + left))```二、DES算法的实验报告:1.实验目的通过实现DES算法,加深对DES算法原理的理解,验证算法的正确性和加密效果。
des加密原理DES加密原理。
DES(Data Encryption Standard)是一种对称密钥加密算法,它使用相同的密钥进行加密和解密,是一种广泛应用的加密算法。
DES加密原理是基于Feistel密码结构和置换-置换网络(P-Box、S-Box)的设计,下面将详细介绍DES加密原理。
DES加密算法采用的是分组密码,将明文分成64位一组,密钥长度为56位,经过16轮迭代加密后得到密文。
在每一轮迭代中,明文会被分成左右两部分,然后经过一系列的置换、替换和异或运算,最终得到加密后的结果。
这样的设计使得DES算法具有较高的安全性和可靠性。
Feistel密码结构是DES加密算法的核心,它采用了轮函数的设计,将明文进行多轮的迭代加密,从而增强了加密的复杂度和安全性。
在每一轮迭代中,右半部分的数据会被传递到下一轮,而左半部分则经过一系列的运算后与右半部分进行异或运算,最终得到新的右半部分数据。
这样的设计使得DES算法具有较高的混淆和扩散性质,增强了加密的安全性和抗攻击能力。
P-Box和S-Box是DES算法中的两个重要的置换盒,它们负责对数据进行置换和替换,从而增加了加密的随机性和复杂度。
P-Box负责对数据进行位的置换,S-Box则负责对数据进行字节的替换,这样的设计增强了加密算法的非线性和随机性,使得DES算法更加抗攻击和安全。
DES算法的密钥长度为56位,这意味着DES算法的密钥空间为2^56,即DES算法共有2^56个可能的密钥。
这样的设计使得DES算法具有较高的密钥空间,增加了破解的难度和成本,使得DES算法更加安全可靠。
总的来说,DES加密算法是一种经典的对称密钥加密算法,它采用了Feistel密码结构、P-Box和S-Box的设计,具有较高的安全性和可靠性。
虽然DES算法已经被更加安全的AES算法所取代,但DES算法仍然具有重要的研究和应用价值,对于理解和学习加密算法具有重要意义。
DES是一个分组密码算法,使用64位密钥(除去8位奇偶校验,实际密钥长度为56位)对64比特的数据分组(二进制数据)加密,产生64位密文数据。
DES是一个对称密码体制,加密和解密使用同意密钥,解密和加密使用同一算法(这样,在硬件与软件设计时有利于加密单元的重用)。
DES的所有的保密性均依赖于密钥。
DES的加密过程可分为加密处理,加密变换和子密钥生成几个部分组成DES算法美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。
1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES,Data Encryption Standard)。
一、DES算法美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。
加密算法要达到的目的(通常称为DES 密码算法要求)主要为以下四点:☆提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改;☆具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握;☆DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础;☆实现经济,运行有效,并且适用于多种完全不同的应用。
1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES,Data Encryption Standard)。
目前在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN的加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。
数据加密算法--详解DES加密算法原理与实现DES算法简介DES(Data Encryption Standard)是⽬前最为流⾏的加密算法之⼀。
DES是对称的,也就是说它使⽤同⼀个密钥来加密和解密数据。
DES还是⼀种分组加密算法,该算法每次处理固定长度的数据段,称之为分组。
DES分组的⼤⼩是64位,如果加密的数据长度不是64位的倍数,可以按照某种具体的规则来填充位。
从本质上来说,DES的安全性依赖于虚假表象,从密码学的术语来讲就是依赖于“混乱和扩散”的原则。
混乱的⽬的是为隐藏任何明⽂同密⽂、或者密钥之间的关系,⽽扩散的⽬的是使明⽂中的有效位和密钥⼀起组成尽可能多的密⽂。
两者结合到⼀起就使得安全性变得相对较⾼。
DES算法具体通过对明⽂进⾏⼀系列的排列和替换操作来将其加密。
过程的关键就是从给定的初始密钥中得到16个⼦密钥的函数。
要加密⼀组明⽂,每个⼦密钥按照顺序(1-16)以⼀系列的位操作施加于数据上,每个⼦密钥⼀次,⼀共重复16次。
每⼀次迭代称之为⼀轮。
要对密⽂进⾏解密可以采⽤同样的步骤,只是⼦密钥是按照逆向的顺序(16-1)对密⽂进⾏处理。
计算16个⼦密钥上⾯提到DES算法的第⼀步就是从初始密钥中计算得出16个⼦密钥。
图⽰1展⽰了这个过程。
DES使⽤⼀个56位的初始密钥,但是这⾥提供的是⼀个64位的值,这是因为在硬件实现中每8位可以⽤于奇偶校验,在软件实现中多出的位只是简单的忽略掉。
要获得⼀个56位的密钥,可以执照表1的⽅式执⾏密钥转换。
解释⼀下表1,按照从左往右从上往下的⽅式看,表格中每个位置P包含初始密钥中位在转换后的密钥中所占的位置。
⽐如,初始密钥中的第57位就是转换后的密钥中的第1位,⽽初始密钥中的第49位则变成转换后的密钥中的第2位,以此类推...。
(数据位的计数顺序按照从左到右从1开始的)表1:DES中密钥的转换表(DesTransform[56])将密钥转换为56位后,接下来计算⼦密钥。
module S_box (in,out);input [1:48] in;output [1:32] out;S1 S1(in[1:6],out[1:4]);S2 S2(in[7:12],out[5:8]);S3 S3(in[13:18],out[9:12]);S4 S4(in[19:24],out[13:16]);S5 S5(in[25:30],out[17:20]);S6 S6(in[31:36],out[21:24]);S7 S7(in[37:42],out[25:28]);S8 S8(in[43:48],out[29:32]);endmodulemodule S1(in,out);input [1:6] in;reg [1:4] out;output [1:4] out;always @ (in[1:6])begincase(in[1:6])6'b000000 : out[1:4] = 4'd14;6'b000001 : out[1:4] = 4'd0;6'b000010 : out[1:4] = 4'd4;6'b000011 : out[1:4] = 4'd15;6'b000100 : out[1:4] = 4'd13;6'b000101 : out[1:4] = 4'd7;6'b000110 : out[1:4] = 4'd1;6'b000111 : out[1:4] = 4'd4;6'b001000 : out[1:4] = 4'd2;6'b001001 : out[1:4] = 4'd14;6'b001010 : out[1:4] = 4'd15;6'b001011 : out[1:4] = 4'd2;6'b001100 : out[1:4] = 4'd11;6'b001101 : out[1:4] = 4'd13;6'b001110 : out[1:4] = 4'd8;6'b001111 : out[1:4] = 4'd1;6'b010000 : out[1:4] = 4'd3;6'b010001 : out[1:4] = 4'd10;6'b010010 : out[1:4] = 4'd10;6'b010011 : out[1:4] = 4'd6;6'b010100 : out[1:4] = 4'd6;6'b010101 : out[1:4] = 4'd12;6'b010110 : out[1:4] = 4'd12;6'b010111 : out[1:4] = 4'd11;6'b011000 : out[1:4] = 4'd5;6'b011001 : out[1:4] = 4'd9;6'b011010 : out[1:4] = 4'd9;6'b011011 : out[1:4] = 4'd5;6'b011100 : out[1:4] = 4'd0;6'b011101 : out[1:4] = 4'd3;6'b011110 : out[1:4] = 4'd7;6'b011111 : out[1:4] = 4'd8;6'b100000 : out[1:4] = 4'd4;6'b100001 : out[1:4] = 4'd15;6'b100010 : out[1:4] = 4'd1;6'b100011 : out[1:4] = 4'd12;6'b100100 : out[1:4] = 4'd14;6'b100101 : out[1:4] = 4'd8;6'b100110 : out[1:4] = 4'd8;6'b100111 : out[1:4] = 4'd2;6'b101000 : out[1:4] = 4'd13;6'b101001 : out[1:4] = 4'd4;6'b101010 : out[1:4] = 4'd6;6'b101011 : out[1:4] = 4'd9;6'b101100 : out[1:4] = 4'd2;6'b101101 : out[1:4] = 4'd1;6'b101110 : out[1:4] = 4'd11;6'b101111 : out[1:4] = 4'd7;6'b110000 : out[1:4] = 4'd15;6'b110001 : out[1:4] = 4'd5;6'b110010 : out[1:4] = 4'd12;6'b110011 : out[1:4] = 4'd11;6'b110100 : out[1:4] = 4'd9;6'b110101 : out[1:4] = 4'd3;6'b110110 : out[1:4] = 4'd7;6'b110111 : out[1:4] = 4'd14;6'b111000 : out[1:4] = 4'd3;6'b111001 : out[1:4] = 4'd10;6'b111010 : out[1:4] = 4'd10;6'b111011 : out[1:4] = 4'd0;6'b111100 : out[1:4] = 4'd5;6'b111101 : out[1:4] = 4'd6;6'b111110 : out[1:4] = 4'd0;6'b111111 : out[1:4] = 4'd13;endcaseendendmodulemodule S2(in,out);input [1:6] in;reg [1:4] out;output [1:4] out;always @ (in[1:6])begincase(in[1:6])6'b000000 : out[1:4] = 4'd15;6'b000001 : out[1:4] = 4'd3;6'b000010 : out[1:4] = 4'd1;6'b000011 : out[1:4] = 4'd13;6'b000100 : out[1:4] = 4'd8;6'b000101 : out[1:4] = 4'd4;6'b000110 : out[1:4] = 4'd14;6'b000111 : out[1:4] = 4'd7;6'b001000 : out[1:4] = 4'd6;6'b001001 : out[1:4] = 4'd15;6'b001010 : out[1:4] = 4'd11;6'b001011 : out[1:4] = 4'd2;6'b001100 : out[1:4] = 4'd3;6'b001101 : out[1:4] = 4'd8;6'b001111 : out[1:4] = 4'd14; 6'b010000 : out[1:4] = 4'd9; 6'b010001 : out[1:4] = 4'd12; 6'b010010 : out[1:4] = 4'd7; 6'b010011 : out[1:4] = 4'd0; 6'b010100 : out[1:4] = 4'd2; 6'b010101 : out[1:4] = 4'd1; 6'b010110 : out[1:4] = 4'd13; 6'b010111 : out[1:4] = 4'd10; 6'b011000 : out[1:4] = 4'd12; 6'b011001 : out[1:4] = 4'd6; 6'b011010 : out[1:4] = 4'd0; 6'b011011 : out[1:4] = 4'd9; 6'b011100 : out[1:4] = 4'd5; 6'b011101 : out[1:4] = 4'd11; 6'b011110 : out[1:4] = 4'd10; 6'b011111 : out[1:4] = 4'd5; 6'b100000 : out[1:4] = 4'd0; 6'b100001 : out[1:4] = 4'd13; 6'b100010 : out[1:4] = 4'd14; 6'b100011 : out[1:4] = 4'd8;6'b100101 : out[1:4] = 4'd10; 6'b100110 : out[1:4] = 4'd11; 6'b100111 : out[1:4] = 4'd1; 6'b101000 : out[1:4] = 4'd10; 6'b101001 : out[1:4] = 4'd3; 6'b101010 : out[1:4] = 4'd4; 6'b101011 : out[1:4] = 4'd15; 6'b101100 : out[1:4] = 4'd13; 6'b101101 : out[1:4] = 4'd4; 6'b101110 : out[1:4] = 4'd1; 6'b101111 : out[1:4] = 4'd2; 6'b110000 : out[1:4] = 4'd5; 6'b110001 : out[1:4] = 4'd11; 6'b110010 : out[1:4] = 4'd8; 6'b110011 : out[1:4] = 4'd6; 6'b110100 : out[1:4] = 4'd12; 6'b110101 : out[1:4] = 4'd7; 6'b110110 : out[1:4] = 4'd6; 6'b110111 : out[1:4] = 4'd12; 6'b111000 : out[1:4] = 4'd9; 6'b111001 : out[1:4] = 4'd0;6'b111011 : out[1:4] = 4'd5;6'b111100 : out[1:4] = 4'd2;6'b111101 : out[1:4] = 4'd14;6'b111110 : out[1:4] = 4'd15;6'b111111 : out[1:4] = 4'd9;endcaseendendmodulemodule S3(in,out);input [1:6] in;reg [1:4] out;output [1:4] out;always @ (in[1:6])begincase(in[1:6])6'b000000 : out[1:4] = 4'd10;6'b000001 : out[1:4] = 4'd13;6'b000010 : out[1:4] = 4'd0;6'b000011 : out[1:4] = 4'd7;6'b000101 : out[1:4] = 4'd0; 6'b000110 : out[1:4] = 4'd14; 6'b000111 : out[1:4] = 4'd9; 6'b001000 : out[1:4] = 4'd6; 6'b001001 : out[1:4] = 4'd3; 6'b001010 : out[1:4] = 4'd3; 6'b001011 : out[1:4] = 4'd4; 6'b001100 : out[1:4] = 4'd15; 6'b001101 : out[1:4] = 4'd6; 6'b001110 : out[1:4] = 4'd5; 6'b001111 : out[1:4] = 4'd10; 6'b010000 : out[1:4] = 4'd1; 6'b010001 : out[1:4] = 4'd2; 6'b010010 : out[1:4] = 4'd13; 6'b010011 : out[1:4] = 4'd8; 6'b010100 : out[1:4] = 4'd12; 6'b010101 : out[1:4] = 4'd5; 6'b010110 : out[1:4] = 4'd7; 6'b010111 : out[1:4] = 4'd14; 6'b011000 : out[1:4] = 4'd11; 6'b011001 : out[1:4] = 4'd12;6'b011011 : out[1:4] = 4'd11; 6'b011100 : out[1:4] = 4'd2; 6'b011101 : out[1:4] = 4'd15; 6'b011110 : out[1:4] = 4'd8; 6'b011111 : out[1:4] = 4'd1; 6'b100000 : out[1:4] = 4'd13; 6'b100001 : out[1:4] = 4'd1; 6'b100010 : out[1:4] = 4'd6; 6'b100011 : out[1:4] = 4'd10; 6'b100100 : out[1:4] = 4'd4; 6'b100101 : out[1:4] = 4'd13; 6'b100110 : out[1:4] = 4'd9; 6'b100111 : out[1:4] = 4'd0; 6'b101000 : out[1:4] = 4'd8; 6'b101001 : out[1:4] = 4'd6; 6'b101010 : out[1:4] = 4'd15; 6'b101011 : out[1:4] = 4'd9; 6'b101100 : out[1:4] = 4'd3; 6'b101101 : out[1:4] = 4'd8; 6'b101110 : out[1:4] = 4'd0; 6'b101111 : out[1:4] = 4'd7;6'b110001 : out[1:4] = 4'd4;6'b110010 : out[1:4] = 4'd1;6'b110011 : out[1:4] = 4'd15;6'b110100 : out[1:4] = 4'd2;6'b110101 : out[1:4] = 4'd14;6'b110110 : out[1:4] = 4'd12;6'b110111 : out[1:4] = 4'd3;6'b111000 : out[1:4] = 4'd5;6'b111001 : out[1:4] = 4'd11;6'b111010 : out[1:4] = 4'd10;6'b111011 : out[1:4] = 4'd5;6'b111100 : out[1:4] = 4'd14;6'b111101 : out[1:4] = 4'd2;6'b111110 : out[1:4] = 4'd7;6'b111111 : out[1:4] = 4'd12;endcaseendendmodulemodule S4(in,out);input [1:6] in;reg [1:4] out;output [1:4] out;always @ (in[1:6])begincase(in[1:6])6'b000000 : out[1:4] = 4'd7;6'b000001 : out[1:4] = 4'd13;6'b000010 : out[1:4] = 4'd13;6'b000011 : out[1:4] = 4'd8;6'b000100 : out[1:4] = 4'd14;6'b000101 : out[1:4] = 4'd11;6'b000110 : out[1:4] = 4'd3;6'b000111 : out[1:4] = 4'd5;6'b001000 : out[1:4] = 4'd0;6'b001001 : out[1:4] = 4'd6;6'b001010 : out[1:4] = 4'd6;6'b001011 : out[1:4] = 4'd15;6'b001100 : out[1:4] = 4'd9;6'b001101 : out[1:4] = 4'd0;6'b001110 : out[1:4] = 4'd10;6'b001111 : out[1:4] = 4'd3;6'b010001 : out[1:4] = 4'd4; 6'b010010 : out[1:4] = 4'd2; 6'b010011 : out[1:4] = 4'd7; 6'b010100 : out[1:4] = 4'd8; 6'b010101 : out[1:4] = 4'd2; 6'b010110 : out[1:4] = 4'd5; 6'b010111 : out[1:4] = 4'd12; 6'b011000 : out[1:4] = 4'd11; 6'b011001 : out[1:4] = 4'd1; 6'b011010 : out[1:4] = 4'd12; 6'b011011 : out[1:4] = 4'd10; 6'b011100 : out[1:4] = 4'd4; 6'b011101 : out[1:4] = 4'd14; 6'b011110 : out[1:4] = 4'd15; 6'b011111 : out[1:4] = 4'd9; 6'b100000 : out[1:4] = 4'd10; 6'b100001 : out[1:4] = 4'd3; 6'b100010 : out[1:4] = 4'd6; 6'b100011 : out[1:4] = 4'd15; 6'b100100 : out[1:4] = 4'd9; 6'b100101 : out[1:4] = 4'd0;6'b100111 : out[1:4] = 4'd6; 6'b101000 : out[1:4] = 4'd12; 6'b101001 : out[1:4] = 4'd10; 6'b101010 : out[1:4] = 4'd11; 6'b101011 : out[1:4] = 4'd1; 6'b101100 : out[1:4] = 4'd7; 6'b101101 : out[1:4] = 4'd13; 6'b101110 : out[1:4] = 4'd13; 6'b101111 : out[1:4] = 4'd8; 6'b110000 : out[1:4] = 4'd15; 6'b110001 : out[1:4] = 4'd9; 6'b110010 : out[1:4] = 4'd1; 6'b110011 : out[1:4] = 4'd4; 6'b110100 : out[1:4] = 4'd3; 6'b110101 : out[1:4] = 4'd5; 6'b110110 : out[1:4] = 4'd14; 6'b110111 : out[1:4] = 4'd11; 6'b111000 : out[1:4] = 4'd5; 6'b111001 : out[1:4] = 4'd12; 6'b111010 : out[1:4] = 4'd2; 6'b111011 : out[1:4] = 4'd7;6'b111101 : out[1:4] = 4'd2;6'b111110 : out[1:4] = 4'd4;6'b111111 : out[1:4] = 4'd14;endcaseendendmodulemodule S5(in,out);input [1:6] in;reg [1:4] out;output [1:4] out;always @ (in[1:6])begincase(in[1:6])6'b000000 : out[1:4] = 4'd2;6'b000001 : out[1:4] = 4'd14;6'b000010 : out[1:4] = 4'd12;6'b000011 : out[1:4] = 4'd11;6'b000100 : out[1:4] = 4'd4;6'b000101 : out[1:4] = 4'd2;6'b000111 : out[1:4] = 4'd12; 6'b001000 : out[1:4] = 4'd7; 6'b001001 : out[1:4] = 4'd4; 6'b001010 : out[1:4] = 4'd10; 6'b001011 : out[1:4] = 4'd7; 6'b001100 : out[1:4] = 4'd11; 6'b001101 : out[1:4] = 4'd13; 6'b001110 : out[1:4] = 4'd6; 6'b001111 : out[1:4] = 4'd1; 6'b010000 : out[1:4] = 4'd8; 6'b010001 : out[1:4] = 4'd5; 6'b010010 : out[1:4] = 4'd5; 6'b010011 : out[1:4] = 4'd0; 6'b010100 : out[1:4] = 4'd3; 6'b010101 : out[1:4] = 4'd15; 6'b010110 : out[1:4] = 4'd15; 6'b010111 : out[1:4] = 4'd10; 6'b011000 : out[1:4] = 4'd13; 6'b011001 : out[1:4] = 4'd3; 6'b011010 : out[1:4] = 4'd0; 6'b011011 : out[1:4] = 4'd9;6'b011101 : out[1:4] = 4'd8; 6'b011110 : out[1:4] = 4'd9; 6'b011111 : out[1:4] = 4'd6; 6'b100000 : out[1:4] = 4'd4; 6'b100001 : out[1:4] = 4'd11; 6'b100010 : out[1:4] = 4'd2; 6'b100011 : out[1:4] = 4'd8; 6'b100100 : out[1:4] = 4'd1; 6'b100101 : out[1:4] = 4'd12; 6'b100110 : out[1:4] = 4'd11; 6'b100111 : out[1:4] = 4'd7; 6'b101000 : out[1:4] = 4'd10; 6'b101001 : out[1:4] = 4'd1; 6'b101010 : out[1:4] = 4'd13; 6'b101011 : out[1:4] = 4'd14; 6'b101100 : out[1:4] = 4'd7; 6'b101101 : out[1:4] = 4'd2; 6'b101110 : out[1:4] = 4'd8; 6'b101111 : out[1:4] = 4'd13; 6'b110000 : out[1:4] = 4'd15; 6'b110001 : out[1:4] = 4'd6;6'b110011 : out[1:4] = 4'd15;6'b110100 : out[1:4] = 4'd12;6'b110101 : out[1:4] = 4'd0;6'b110110 : out[1:4] = 4'd5;6'b110111 : out[1:4] = 4'd9;6'b111000 : out[1:4] = 4'd6;6'b111001 : out[1:4] = 4'd10;6'b111010 : out[1:4] = 4'd3;6'b111011 : out[1:4] = 4'd4;6'b111100 : out[1:4] = 4'd0;6'b111101 : out[1:4] = 4'd5;6'b111110 : out[1:4] = 4'd14;6'b111111 : out[1:4] = 4'd3;endcaseendendmodulemodule S6(in,out);input [1:6] in;reg [1:4] out;output [1:4] out;always @ (in[1:6])begincase(in[1:6])6'b000000 : out[1:4] = 4'd12;6'b000001 : out[1:4] = 4'd10;6'b000010 : out[1:4] = 4'd1;6'b000011 : out[1:4] = 4'd15;6'b000100 : out[1:4] = 4'd10;6'b000101 : out[1:4] = 4'd4;6'b000110 : out[1:4] = 4'd15;6'b000111 : out[1:4] = 4'd2;6'b001000 : out[1:4] = 4'd9;6'b001001 : out[1:4] = 4'd7;6'b001010 : out[1:4] = 4'd2;6'b001011 : out[1:4] = 4'd12;6'b001100 : out[1:4] = 4'd6;6'b001101 : out[1:4] = 4'd9;6'b001110 : out[1:4] = 4'd8;6'b001111 : out[1:4] = 4'd5;6'b010000 : out[1:4] = 4'd0;6'b010010 : out[1:4] = 4'd13; 6'b010011 : out[1:4] = 4'd1; 6'b010100 : out[1:4] = 4'd3; 6'b010101 : out[1:4] = 4'd13; 6'b010110 : out[1:4] = 4'd4; 6'b010111 : out[1:4] = 4'd14; 6'b011000 : out[1:4] = 4'd14; 6'b011001 : out[1:4] = 4'd0; 6'b011010 : out[1:4] = 4'd7; 6'b011011 : out[1:4] = 4'd11; 6'b011100 : out[1:4] = 4'd5; 6'b011101 : out[1:4] = 4'd3; 6'b011110 : out[1:4] = 4'd11; 6'b011111 : out[1:4] = 4'd8; 6'b100000 : out[1:4] = 4'd9; 6'b100001 : out[1:4] = 4'd4; 6'b100010 : out[1:4] = 4'd14; 6'b100011 : out[1:4] = 4'd3; 6'b100100 : out[1:4] = 4'd15; 6'b100101 : out[1:4] = 4'd2; 6'b100110 : out[1:4] = 4'd5;6'b101000 : out[1:4] = 4'd2; 6'b101001 : out[1:4] = 4'd9; 6'b101010 : out[1:4] = 4'd8; 6'b101011 : out[1:4] = 4'd5; 6'b101100 : out[1:4] = 4'd12; 6'b101101 : out[1:4] = 4'd15; 6'b101110 : out[1:4] = 4'd3; 6'b101111 : out[1:4] = 4'd10; 6'b110000 : out[1:4] = 4'd7; 6'b110001 : out[1:4] = 4'd11; 6'b110010 : out[1:4] = 4'd0; 6'b110011 : out[1:4] = 4'd14; 6'b110100 : out[1:4] = 4'd4; 6'b110101 : out[1:4] = 4'd1; 6'b110110 : out[1:4] = 4'd10; 6'b110111 : out[1:4] = 4'd7; 6'b111000 : out[1:4] = 4'd1; 6'b111001 : out[1:4] = 4'd6; 6'b111010 : out[1:4] = 4'd13; 6'b111011 : out[1:4] = 4'd0; 6'b111100 : out[1:4] = 4'd11;6'b111110 : out[1:4] = 4'd6;6'b111111 : out[1:4] = 4'd13;endcaseendendmodulemodule S7(in,out);input [1:6] in;reg [1:4] out;output [1:4] out;always @ (in[1:6])begincase(in[1:6])6'b000000 : out[1:4] = 4'd4;6'b000001 : out[1:4] = 4'd13;6'b000010 : out[1:4] = 4'd11;6'b000011 : out[1:4] = 4'd0;6'b000100 : out[1:4] = 4'd2;6'b000101 : out[1:4] = 4'd11;6'b000110 : out[1:4] = 4'd14;6'b000111 : out[1:4] = 4'd7;6'b001001 : out[1:4] = 4'd4; 6'b001010 : out[1:4] = 4'd0; 6'b001011 : out[1:4] = 4'd9; 6'b001100 : out[1:4] = 4'd8; 6'b001101 : out[1:4] = 4'd1; 6'b001110 : out[1:4] = 4'd13; 6'b001111 : out[1:4] = 4'd10; 6'b010000 : out[1:4] = 4'd3; 6'b010001 : out[1:4] = 4'd14; 6'b010010 : out[1:4] = 4'd12; 6'b010011 : out[1:4] = 4'd3; 6'b010100 : out[1:4] = 4'd9; 6'b010101 : out[1:4] = 4'd5; 6'b010110 : out[1:4] = 4'd7; 6'b010111 : out[1:4] = 4'd12; 6'b011000 : out[1:4] = 4'd5; 6'b011001 : out[1:4] = 4'd2; 6'b011010 : out[1:4] = 4'd10; 6'b011011 : out[1:4] = 4'd15; 6'b011100 : out[1:4] = 4'd6; 6'b011101 : out[1:4] = 4'd8;6'b011111 : out[1:4] = 4'd6; 6'b100000 : out[1:4] = 4'd1; 6'b100001 : out[1:4] = 4'd6; 6'b100010 : out[1:4] = 4'd4; 6'b100011 : out[1:4] = 4'd11; 6'b100100 : out[1:4] = 4'd11; 6'b100101 : out[1:4] = 4'd13; 6'b100110 : out[1:4] = 4'd13; 6'b100111 : out[1:4] = 4'd8; 6'b101000 : out[1:4] = 4'd12; 6'b101001 : out[1:4] = 4'd1; 6'b101010 : out[1:4] = 4'd3; 6'b101011 : out[1:4] = 4'd4; 6'b101100 : out[1:4] = 4'd7; 6'b101101 : out[1:4] = 4'd10; 6'b101110 : out[1:4] = 4'd14; 6'b101111 : out[1:4] = 4'd7; 6'b110000 : out[1:4] = 4'd10; 6'b110001 : out[1:4] = 4'd9; 6'b110010 : out[1:4] = 4'd15; 6'b110011 : out[1:4] = 4'd5;6'b110101 : out[1:4] = 4'd0;6'b110110 : out[1:4] = 4'd8;6'b110111 : out[1:4] = 4'd15;6'b111000 : out[1:4] = 4'd0;6'b111001 : out[1:4] = 4'd14;6'b111010 : out[1:4] = 4'd5;6'b111011 : out[1:4] = 4'd2;6'b111100 : out[1:4] = 4'd9;6'b111101 : out[1:4] = 4'd3;6'b111110 : out[1:4] = 4'd2;6'b111111 : out[1:4] = 4'd12;endcaseendendmodulemodule S8(in,out);input [1:6] in;reg [1:4] out;output [1:4] out;always @ (in[1:6])begincase(in[1:6])6'b000000 : out[1:4] = 4'd13;6'b000001 : out[1:4] = 4'd1;6'b000010 : out[1:4] = 4'd2;6'b000011 : out[1:4] = 4'd15;6'b000100 : out[1:4] = 4'd8;6'b000101 : out[1:4] = 4'd13;6'b000110 : out[1:4] = 4'd4;6'b000111 : out[1:4] = 4'd8;6'b001000 : out[1:4] = 4'd6;6'b001001 : out[1:4] = 4'd10;6'b001010 : out[1:4] = 4'd15;6'b001011 : out[1:4] = 4'd3;6'b001100 : out[1:4] = 4'd11;6'b001101 : out[1:4] = 4'd7;6'b001110 : out[1:4] = 4'd1;6'b001111 : out[1:4] = 4'd4;6'b010000 : out[1:4] = 4'd10;6'b010001 : out[1:4] = 4'd12;6'b010010 : out[1:4] = 4'd9;6'b010011 : out[1:4] = 4'd5;6'b010101 : out[1:4] = 4'd6;6'b010110 : out[1:4] = 4'd14; 6'b010111 : out[1:4] = 4'd11; 6'b011000 : out[1:4] = 4'd5; 6'b011001 : out[1:4] = 4'd0; 6'b011010 : out[1:4] = 4'd0; 6'b011011 : out[1:4] = 4'd14; 6'b011100 : out[1:4] = 4'd12; 6'b011101 : out[1:4] = 4'd9; 6'b011110 : out[1:4] = 4'd7; 6'b011111 : out[1:4] = 4'd2; 6'b100000 : out[1:4] = 4'd7; 6'b100001 : out[1:4] = 4'd2; 6'b100010 : out[1:4] = 4'd11; 6'b100011 : out[1:4] = 4'd1; 6'b100100 : out[1:4] = 4'd4; 6'b100101 : out[1:4] = 4'd14; 6'b100110 : out[1:4] = 4'd1; 6'b100111 : out[1:4] = 4'd7;6'b101000 : out[1:4] = 4'd9; 6'b101001 : out[1:4] = 4'd4; 6'b101010 : out[1:4] = 4'd12; 6'b101011 : out[1:4] = 4'd10;6'b101101 : out[1:4] = 4'd8;6'b101110 : out[1:4] = 4'd2;6'b101111 : out[1:4] = 4'd13;6'b110000 : out[1:4] = 4'd0;6'b110001 : out[1:4] = 4'd15;6'b110010 : out[1:4] = 4'd6;6'b110011 : out[1:4] = 4'd12;6'b110100 : out[1:4] = 4'd10;6'b110101 : out[1:4] = 4'd9;6'b110110 : out[1:4] = 4'd13;6'b110111 : out[1:4] = 4'd0;6'b111000 : out[1:4] = 4'd15;6'b111001 : out[1:4] = 4'd3;6'b111010 : out[1:4] = 4'd3;6'b111011 : out[1:4] = 4'd5;6'b111100 : out[1:4] = 4'd5;6'b111101 : out[1:4] = 4'd6;6'b111110 : out[1:4] = 4'd8;6'b111111 : out[1:4] = 4'd11;endcaseendendmodule。