我正在处理此分配,在此分配中,我将使用用户输入字符串(长度相同或更大的密钥),并使用该字符串执行运行密钥密码来加密和解密文本。加密有效,但解密无效。
手动查看“运行密钥”表,我发现密钥为“ did”的“ ice”将加密为“ lkh”,然后将其签出。回顾表,我发现要将“ lkh”转换为“ ice”,密钥必须更改为“ xsx”,有一会儿,这很容易,因为我错误地认为它是“ sxs” “是”,每个字母向前移动15个字母。实际上,它比将“ d”移动20个字母和将“ i”仅移动10个字母制成“ xsx”的方式更为随意。
我不确定要在我的delete(),getDecryptedText()或decryptionKey()函数中添加什么来使这项工作奏效,或者我什至在正确的方向上尝试移动字母。我想我一定是,但是我目前的想法是,可能需要某种循环才能确定键中每个字符应向前移动多少个字母。
timestamp
答案 0 :(得分:0)
getEncryptedText
可以简化为:
char getEncryptedText( char p, char k )
{
return ( ( p - 'a' ) + ( k - 'a' ) ) % 26 + 'a';
}
我已经用实际的字符值替换了魔术数字,以使代码更易于阅读。
如果我们确定getDecryptedText
与getEncryptedText
完全相反,则无需修改密钥。
char getDecryptedText( char p, char k )
{
return ( ( p - 'a' ) - ( k - 'a' ) + 26 ) % 26 + 'a';
}
+26
是一个小提琴,可以确保该值是正数,因为取模不会对负数产生正确的结果。