CSC 172 加解密系统分析

kantong / 2024-03-19 / 原文

CSC 172–项目1?您可以单独或两名学生一组完成并提交您的项目。?如果你在一个小组中工作,你必须准备一个扩展的自述文件来指定谁编写了代码的每一部分,以保持内部的清晰性和透明度小组项目。?您只允许与您的团队成员合作,不允许以任何方式与其他学生分享您的解决方案。任务您将使用Java编程语言实现下面指定的密码。它应该加密/解密包括明文/密文的文本文件。背景1.加密是对信息或数据进行编码的过程,只有授权方可以访问它。这通常使用算法和秘密来完成密钥将原始数据转换为称为密文的难以理解的形式。2.明文是指原始的、未加密的数据或消息保密。3.密文是指经过加密的数据或信息形式加密。使用文件要加密文本文件的内容,您必须:?读取文件:打开要加密的文件并将其内容读取到内存中。?转换为二进制。?加密数据:使用所提供的加密算法和用户密钥对从文件中读取的数据进行加密。?请勿转换回字符。?将加密数据写入文件:将加密数据保存到新文件中。要解密文本文件的内容,您必须:1.?读取文件:打开要解密的文件并将其内容读入内存(内容应该只是由0和1组成的长序列)。?解密数据:使用所提供的解密算法和用户密钥对从文件中读取的数据进行加密。?转换为字符。?将解密后的数据写入文件:将加密后的数据保存到新文件中。1算法描述该算法只加密固定数量的比特(64比特)。要加密较长的输入,请使用简单的ECB(电子代码簿)模式。以下是它的工作原理:?将数据划分为块:明文数据被划分为64个固定大小的块位。?对每个块独立应用加密:对每个明文块进行加密独立地使用相同的密钥和加密算法。相同的密钥是用于每个块。?输出加密块:将生成的密文块连接在一起以形成完整的密文。?如果最后一个块没有足够的位,则需要对其进行填充以满足要求块大小。这个过程被称为填充。使用零填充:追加零位直到块的末端,直到它达到所需的大小。(不用担心额外费用解密时末尾的字符。)代 写CSC 172 包括加密/解密实现以下对称密钥加密算法的单个明文/密文块的方法:2.你的输出应该是一个64个0和1的块。(不要在中表示输出块十六进制表示法。如果你这样做,你会得到-10%。)加密和解密几乎是相同,但为了解密,您需要按相反的顺序使用子密钥:k10,k9。。。k13.1.输入拆分:将64位的明文块划分为32位的两半。让我们把这一半表示为L0和R0。2.圆函数应用:在每一轮中,一个圆函数f应用于一个一半的数据,通常是右半部分Ri,使用32位的循环密钥ki。这个然后将函数的结果和另一半Li进行异或.Li+1=RiRi+1=李⊕ f(Ri,ki)3.交换:每轮比赛结束后,双方交换一半,使左半部分变成右半部分,反之亦然。4.迭代:步骤2和3重复10次。5.输出级联:所有回合完成后,最终输出由两个半部(L10和R10)连接在一起。这就形成了密文。1.1 f函数f函数(圆函数)的工作原理如下:1.异或门:32个输入位与循环密钥ki进行异或.2.拆分:32位被拆分为4块8位。4.3.S盒:对于每段8位,计算S盒的输出('在S表’)。4.输出连接:所有四个部分连接在一起形成32位。5.置换:使用置换P对32个比特进行置换。S是替换盒变换(Rijndael S-盒):S盒的表,用十六进制表示以表示紧凑性。置换P由下式给出表格:如果需要对S和P进行澄清,请参见最后一页。5.1.2计算子密钥32比特的循环密钥(子密钥ki)通过以下方式从56比特的输入密钥导出的密钥调度(总共10个子密钥),使用以下调度:1.拆分:56位的主密钥k被拆分为28位的两半。让我们表示这一半作为C0和D0。2.变换函数:在每一轮中,应用左移1的函数LS1分别与数据的两个半部分,通常是右半部分Ri,使用圆形键ki的32位。然后将函数的结果与另一半Li进行异或.Ci+1=LS1(Ci)Di+1=LS1(Di)3.连接:在每一轮中,两半(Ci和Di)连接在一起。第一个(最左边的)32位形成圆形子密钥ki.4.迭代:步骤2和3重复10次。6.1.3所需方法您的实施必须包括以下方法:?自定义xorIt(二进制1、二进制2)?自定义shiftIt(二进制输入)?自定义permuteIt(二进制输入)?自定义替换S(二进制输入)?函数F(右半,子键)?encryptBlock(块,inputKey),?decryptBlock(块,inputKey),?加密(longBinaryInput,inputKey),?解密(longBinaryInput,inputKey),?keyScheduleTransform(inputKey),?运行测试()?您可以拥有其他辅助功能。自定义意味着您不能使用现成的方法,并且必须编写自己的方法。1.4内置测试当用户运行程序时,应调用runTests()mathod,并打印以下测试用例的输出:?encryptBloc(所有一个,所有一个)?encryptBloc(全零,全一)?encryptBloc(全零,零)?encryptBloc(块,输入密钥),其中:块=1100110010000000000001110101111100010001100101111010001001001100输入键=全零?decryptBlock(所有一个,所有一个)?decryptBlock(全零,全一)7.?decryptBlock(全零,零)?decryptBlock(块,输入密钥),其中:块=01010110100011101110010001111000010011100110000011110101输入键=所有键?decryptBlock(块,输入密钥),其中:块=001100010111011101110010010100100100110101101010011111010111输入键=全零运行程序时当用户运行程序时,它应该打印第1.4节中测试用例的输出。然后程序应该提示用户选择是加密还是解密并指定要处理的文件名。此外,程序应要求提供一个文件名保存输出,并且应该为此目的创建一个适当的文件。运行测试:输出:加密(所有一个,所有一个)0101011010001110111001000111100001001110010001100110000011110101输出:加密(全零,全一)1100111010001000100011011010110110110010100101011001100000101000输出:加密(全零,全零)1010100101110001000110111000011110110001101110011001111100001010输出:加密(块,全零),其中:块=11001100100000000000011101011111000100011001011110100010010011000010101110011011010001010111000010110110101011111010000101100101输出:解密(所有一个,所有一个)0100111001000110011000001111010101010110100011101110010001111000输出:解密(全零,全一)1011001010010101100110000010100011001110100010001000110110101101输出:解密(全零,全零)1011000110111001100111110000101010101001011100010001101110000111输出用于:解密(块,全部为一),其中:块=010101101000111011100100011110000100111001100000111101011111111111111111111111111111111111111111111111111111111111111111输出:解密(块,全部为零),其中:块=0011000101110111011100100101001001001101011010100111110101111111111111111111111111111111111111111111111111111111111111111111要加密还是解密(E/D):E文件名:data。txt密钥:101011010111011101010101010111000101101010111000101101010108.输出文件:data1。txt提交要求压缩(归档)所有项目源文件和一个自述文件,并将其保存为Project1LastName。拉链文件在文件名中包括您的姓氏(+合作伙伴)。将文件上载到适当的文件夹。您的自述文件应包括团队成员的姓名以及对项目有用的任何具体说明。它还应该包括您已经实现的所有功能(包括附加功能)。确保所有来源文件被正确地注释,这样用户就可以浏览您的代码而不会丢失。2分级此作业的量规可通过Gradescope获得。将测试您的解决方案使用私有测试用例。如果程序未编译,则得0分。其余的没有得分。分级完成。2.1关于学术诚信的重要注意事项如果有些任务对你来说很有挑战性或不具挑战性,请随时与其他人讨论,但不限于所有任务讨论必须在不编写代码或伪代码的情况下进行高级别的讨论。一旦你坐下然后开始编码,你写的所有代码都应该是你自己的。使用来自其他的就绪代码来源(互联网、朋友、聊天GPT等)将被视为违反学术诚实在提交您的工作后,您应该能够详细解释您的代码,如果实验室助教或教员要求。如果不能,您的初始积分可能会减少回答有关您提交的作品的问题。3个提示?文本文件sbox。txt包含一个可以使用的常量-S框查找表。?S盒示例:–假设我们要计算字节53(二进制01010011)的替换。–我们将首先将53转换为它的行和列索引。–第一个十六进制数字(5)表示行索引。–第二个十六进制数字(3)表示列索引。–因此,对于53,行索引为5,列索引为3。–现在,我们将使用这些索引查找S框中的值。9–S-Box中第5行和第3列的值为ed(二进制11101101)。?排列表示例:考虑表(3x3):样本输入:101111000排列后输出:001111010–排列表根据指定位置。–排列表中的每个数字表示对应的元素。–例如,输入位置1处的元素(值1)变为元素在输出的位置4处。–类似地,输入位置9处的元素(值0)变为输出的位置1。样本输入2:111000111排列2后输出:111100101
WX:codehelp