【问题标题】:monoalphabetic ciper decryption?单字母密码解密?
【发布时间】:2013-05-06 19:45:38
【问题描述】:

谁能看到我在这里做错了什么?我有一个算法,它通过沿数组移动 14 个空格来加密字符串,但是当我尝试解密它时,一些字母会重复,例如
加密时:abcdefghijklmnopqrstuvwxyz == opqrstuvwxyzabcdefghijklmn
解密时:opqrstuvwxyzabcdefghijklmn == abcdefghijklklabcdefghijkl

char[] plaintext = input.toCharArray();

for(int i = 0; i<plaintext.length; i++) {
    for(int j = 0 ; j<26; j++) {
        if(j>=14 && plaintext[i]==alphabet[j]) {
            plaintext[i] = alphabet[j-14];
            break;
        }

        else if(plaintext[i] == alphabet[j] && j<14 ) {
            plaintext[i] = alphabet [j+14] ;
        }
    }
}

【问题讨论】:

  • 你正在尝试的几乎,只是一个 Rot13,这不是一种加密形式。任何有半分钟空闲时间的人都可以对其进行逆向工程。
  • 是的,rot13 是一种加密形式。它不是一种 strong 形式的加密,它是一种对称旋转(普通替换密码)。
  • 这是一项任务,这正是我被告知要做的事情。
  • @d99 也许你可以在这里解释你的逻辑?对我来说,这似乎是不必要的复杂。

标签: java encryption jcreator


【解决方案1】:

问题在于,当字符为&gt;= 14&lt; 14时,你应用的操作是不一样的,而且它也是错误的,因为它可能会越界。

你要做的是:

  • 18 (&gt;= 14) -&gt; 18 - 14 = 418 + 14 = 32 = 26+66 != 4
  • 13 (&lt;14) -&gt; 13 + 14 = 27 超出范围。

该方法不正确,您应该将值包裹在字母数组上,这可以使用 mod % 运算符轻松完成:

newIndex = (oldIndex+shift) % alphabetLength

如果不使用适当的工具,每一项简单的任务都容易出错且难以维护。您也可以不使用模数,但计算应该是正确的,在字母索引中添加和减去 14 肯定不会创建有效的映射。

【讨论】:

  • 对不起,我对 java 和加密都很陌生。在我的情况下,这将如何实现?
  • 既然是作业,我想你应该尝试自己解决它,我写的内容足以让你了解你的具体情况。这个任务与加密无关,它只是编程。
  • 到目前为止,我已经为此工作了 4 天,明天早上就到期了,但我会试一试,无论如何感谢您的帮助!
  • 谢谢,我看过了,但我认为明天之前我没有时间了解它。感谢您的所有帮助,我已接受您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2020-01-31
  • 2013-08-19
相关资源
最近更新 更多