【问题标题】:How to encrypt a text from my code?如何加密我的代码中的文本?
【发布时间】:2013-04-22 21:34:24
【问题描述】:

我制作了这段代码来加密文本并将新文本放在 TextView 中。我当时正在想办法做几件事。

  1. 如何使每个字母 =

  2. 如何以一种方式更改第一个字母,以另一种方式更改第二个字母,以另一种方式更改第三个字母。下一个字母,第 4 个,应该像第一个字母一样改变,第 5 个像第二个字母一样,依此类推,例如“那个”改变 1,2,3 = “ujdu”

    C = Integer.valueOf(ceasarNr);
    String initialString = yourString.getText().toString();
    char[] chars = initialString.toCharArray();
    for (int i = 0; i < chars.length; ++i)
        chars[i] = (char)((int)chars[i] + C);
    String resultString = new String(chars);
    krypteredeTekst.setText(resultString);
    

【问题讨论】:

  • 您当前的代码有什么问题?

标签: java encryption for-loop char


【解决方案1】:

我相信您想为前 3 个字母中的每一个使用不同的凯撒键,然后为下一组三个字母重复相同的凯撒键,依此类推对吗?

我不是 100% 确定如何处理不仅仅是我经常处理的标准 26 个字母表字符,但处理这个问题的一种方法是创建一个列表,其中的字符按列表中的顺序排列。如果您这样做,请务必将您的字符串切换为全小写,这样如果有大写字母,您就不会出现匹配错误

请不要我无法测试下面的代码,因此很容易出现错误(包括语法错误)我认为它应该可以工作,但您应该能够使其更优雅(例如 for都有点难看)和一些东西应该移到他们自己的方法中。

List<String> characters = new ArrayList<String>();
...Fill the List with the alphabet in order here (best to do in it's own method)
String initialString = yourString.getText().toString().toLowercase();
char[] chars = initialString.toCharArray();
for (int i = 1; i <= chars.length; i++) {
    C = Integer.valueOf(ceasarNr1);
    if ( i%2 ==0 ) C = Integer.valueOf(ceasarNr2);
    if ( i%3 ==0 ) C = Integer.valueOf(ceasarNr3);

    chars[i-1] = characters.get((characters.indexOf(chars[i-1]) + C)%29);
}
String resultString = new String(chars);
krypteredeTekst.setText(resultString);

【讨论】:

  • 感谢回答 :) 我稍后下班回家时会测试它^^
  • 我试图将它插入到我的代码中,但它在“characters.get((characters.indexOf(chars[i-1]) + C) 处显示“无法从字符串转换为字符” %29);"
  • 它还说它不能在字符串上使用 .toLowerCase() :P
  • toLowerCase() 应该在字符串上工作,字符串到字符的转换只是我搞砸了,虽然哈哈。我想这是将编码的字符插入到抱怨的字符数组中的那一行。就像我说的,我没有编译或测试这个,所以我确信会有一个错误。只需在它抱怨的地方切换从 char 到 string(或从 string 到 char)
  • 最简单的做法是简单地将 List 设为 List 并处理它。请注意,这是字符包装对象的列表,而不是 char 原始类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2022-10-12
相关资源
最近更新 更多