String 程序集MIPS中加密/解密文本字符串的程序

String 程序集MIPS中加密/解密文本字符串的程序,string,encryption,mips,mars-simulator,String,Encryption,Mips,Mars Simulator,我想创建一个程序,读取输入的字符串,并通过一个预定义的操作(我想到的是一个随机生成的整数的和)通过返回加密字符串和密钥来加密字符串,以便在瞬间对其进行解码 你能给我一些关于如何处理这根绳子的建议吗 我想这样做: li $v0,8 la $a0,buffer li $a1,1024 syscall move $s7,$a0 这是读取字符串的代码。 之后我想做: add $t0,$s5,$s3 当我向寄存器添加随机生成的整数时,包含字符串 在了解了价值观之后​​对于随机数和总和,我可以通过减法

我想创建一个程序,读取输入的字符串,并通过一个预定义的操作(我想到的是一个随机生成的整数的和)通过返回加密字符串和密钥来加密字符串,以便在瞬间对其进行解码

你能给我一些关于如何处理这根绳子的建议吗

我想这样做:

li $v0,8
la $a0,buffer
li $a1,1024
syscall

move $s7,$a0
这是读取字符串的代码。 之后我想做:

add $t0,$s5,$s3
当我向寄存器添加随机生成的整数时,包含字符串

在了解了价值观之后​​对于随机数和总和,我可以通过减法再次得到原始字符串


这是一种合适的方法吗?

这在某种程度上取决于加密的目的。据我所知,你所建议的方法基本上是凯撒密码的一种形式。虽然这将在一定程度上保护您的字符串不受偶然观察者的影响,但它绝对不适合用于严重的安全目的。它受到暴力攻击、已知明文和选定明文攻击以及频率分析的影响

暴力攻击背后的思想是,对于任何给定的长度合理的字符串,几乎总是有一个移位使字符串有意义,因此攻击者可以反复尝试不同的移位,直到找到使字符串有意义的移位为止。使字符串有意义的第一个移位几乎肯定是正确的移位

如果您使用的是“经典”Caesar密码(例如C=a、D=B、e=C等),则只有25种可能的移位,因此攻击者平均可以在12.5次猜测中猜出明文(最坏情况下为25次猜测)。在一个像你这样的计划中,你必须使用一个非常大范围的巨大数字,以便能够稍微抵御这一点。例如,如果您只执行1-100之间的转换,攻击者可以在平均50次猜测(在最坏的情况下为100次猜测)的情况下重建明文,这显然不是针对有动机的攻击者的防御,特别是因为此任务易于并行化。假设我的数学计算正确,即使你有一万亿个可能的移位,并且需要100个操作来完成和测试一个特定的移位,如果我的数学计算正确,你可以在7秒内在Intel i7上尝试所有这些操作,平均来说,使用蛮力找到正确答案只需要不到3.5秒

频率分析背后的理念是,你的文本保留了与宿主语言相同的统计特征。例如,在英语中,最常见的字母是“e”,因此如果您在密文中找到最常见的字母,它可能对应于“e”。然后您可以计算出为获得特定输出而对字符串进行了多少移位。例如,如果“g”是密文中最常见的字母,您可以猜测g=e,因此它们一定将文本移位了两位

已知的明文攻击是指攻击者拥有明文及其相应密文的示例,并且他们可以使用该信息来重建密钥必须是什么。选择明文攻击基本上是相同的,只是攻击者可以选择他看到对应密文的明文。(请注意,只有在重复使用密钥时,这才是一个问题,尤其是在以可预测的方式重复使用密钥时;如果从不重复使用密钥,则为已知/选定的明文重构密钥不会向攻击者提供有关您用于其他消息的密钥的任何信息)


我从来没有试过用汇编语言来说明这个事实,但是如果你想要好的安全性,你可能需要考虑。如果您真的对实现的简单性感兴趣,并且愿意采用不太安全的方法,您也可以选择。

:任何人,从最无知的业余爱好者到最好的密码学家,都可以创建一个自己无法破解的算法。谢谢您的回复。我必须为一个项目制作一个汇编mips程序,我可以做我想做的一切。我想创建一个隐藏字符串的程序,但没什么大不了的,只是演示如何管理mips汇编编程。加密是一个一直让我感兴趣的话题,但凭借我的实际技能,我只能做一些很容易被违反的事情。