我是这个网站的新人,我真的很需要帮助。但对不起我的英语,我会尽力做到最好。
我想创建一个程序,在输入中读入一串字符,并通过预定义的操作(我想的是随机生成的整数的总和)通过返回加密的字符串和密钥对字符串进行解密来加密字符串在第二时刻。
你能否就如何处理字符串给我任何建议?
我想这样做:
li $v0,8
la $a0,buffer
li $a1,1024
syscall
move $s7,$a0
这是读取字符串的代码。 之后我想做:
add $t0,$s5,$s3
当我向寄存器中添加随机生成的整数时,包含字符串。
在知道随机数和总和的值之后,我可以再次使用减法得到原始字符串。
这是一个合适的方法吗? 谢谢!! 升。
答案 0 :(得分:1)
这在某种程度上取决于加密的目的。据我所知,你所建议的方法基本上是凯撒密码的一种形式。虽然这会在某种程度上保护你的字符串免受偶然观察者的影响,但它肯定不适合严肃的安全目的。它受到暴力攻击,已知明文和选择明文攻击以及频率分析的影响。
蛮力攻击背后的想法是,对于任何给定的合理长度的字符串,几乎总会有一个移位将使字符串有意义,因此攻击者可以反复尝试不同的移位,直到他找到使字符串有意义的那个。使字符串有意义的第一个转变是几乎肯定正确的转变。
如果你正在做一个经典的"凯撒密码(例如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,因此它们必须将文本移动两个。
已知明文攻击是攻击者拥有明文及其相应密文的示例,他们可以使用该信息重建密钥必须具有的内容。选择明文攻击基本上是相同的,除了攻击者可以选择他看到相应密文的明文。 (请注意,如果您重复使用密钥,这只是一个问题,特别是如果您以可预测的方式执行此操作;如果您从未重复使用密钥,则重建已知/选定明文的密钥会赢得&#t; t向攻击者提供有关您用于其他消息的密钥的任何信息。)
我从来没有尝试用汇编语言来说实话,但如果你想要良好的安全性,你可能会考虑AES。如果您真的对简单的实施感兴趣并且愿意使用不太安全的东西,那么您也可以使用XTEA。