改变字符加密程序

时间:2014-11-19 01:55:00

标签: java

我真的失去了头发。我正在制作(简单)加密程序。 它应该将char设为int,添加13并转换回char。然后它应该以相反的顺序做同样的事情。但我唯一的外印是两个空行?我知道问题是当我转换回字母时,我打印x一切正常。我已经评论过的部分是我尝试过的,当我得到一个输出结束时,它比原始文本更新。我也必须在模块26中这样做。

      String str = ("helloworld");
      String end ="";
      String endtwo ="";

      for(int i = 0; i < str.length(); i++){
        int x = str.charAt(i);
        x = ((char)((x+13)%26));
        char u =(char)x;
        end += u; 
        //end += ((char)(str.charAt(i)+13));
      }

      for(int i = 0; i < str.length(); i++){
        int x = str.charAt(i);
        x = ((char)((x-13)%26));
        char u =(char)x;
        endtwo += u; 
       //endtwo += ((char)(str.charAt(i)-13));
     }

2 个答案:

答案 0 :(得分:0)

在Java中,char是一个整数。请注意该行

 int x = str.charAt(i);

返回一个整数,表示String中第i个位置的字符。那么整数的值是多少?您可以在ASCII table中查找字母表中的字母。你会看到小写的h是十进制的104。所以你再添加13到这个值

  104 + 13 = 117

然后继续使用26进行修改,将值减小到0到25​​之间。

  117 % 26 = 13

ASCII表中的十进制13表示回车符。

类似地,换句话说你从13开始,减去13给0然后0 mod 26是0所以0是ASCII表中的空字符。

因此,请重新考虑加密算法的策略。例如,要获得一个简单的循环密码,您可以减去小写字符&#39; a&#39;来自要编码的角色。

   x = x - 'a';
   x = x + 13;
   x = x % 26;
   x = x + 'a';

这可以保证您最终得到一个字母。但只是小写但是。你如何修改它以迎合大写?

还要仔细考虑最后的解密步骤。减去13并不一定能给出你期望的答案。提示:尝试通过与加密完全相同的过程运行密文,看看会发生什么。

答案 1 :(得分:0)

实现ROT13加密算法的一个非常简单的方法是检查每个字符的ASCCI代码范围,然后根据范围添加13或子13:

String str = "helloworld";

for (int i = 0; i < str.length(); i++) {  
    char c = str.charAt(i);

    if (c >= 'A' && c < 'N' || c >= 'a' && c < 'n') {         
        c += 13;                          
    } else if (c >= 'N' && c <= 'Z' || c >= 'n' && c <= 'z') {    
        c -= 13;                                              
    } 
}