【发布时间】:2015-06-23 16:28:06
【问题描述】:
所以我只需要一点帮助来理解这段代码的工作原理。我从互联网上获得了这段代码,但虽然我完全理解凯撒密码的工作原理,但我无法清楚地理解它。不幸的是,它的代码版本对我来说有点神秘。如果有人能指导我了解这段代码的作用,那将非常有帮助。
public class CaesarCipherProgram{
public static void main(String[] args) {
String str = "This is a secret";
System.out.println( CaesarCipherProgram.encode( str, 3 ));
System.out.println( CaesarCipherProgram.decode( CaesarCipherProgram.encode( str, 3), 3));
}
public static String decode(String enc, int offset) {
return encode(enc, 26-offset);
}
public static String encode(String enc, int offset) {
offset = offset % 26 + 26;
StringBuilder encoded = new StringBuilder();
for (char i : enc.toCharArray()) {
if (Character.isLetter(i)) {
if (Character.isUpperCase(i)) {
encoded.append((char) ('A' + (i - 'A' + offset) % 26 ));
} else {
encoded.append((char) ('a' + (i - 'a' + offset) % 26 ));
}
} else {
encoded.append(i);
}
}
return encoded.toString();
}
}
我的问题:
首先,我不明白这里是如何使用模数运算符来获取我们的偏移量的:
offset = offset % 26 + 26;
其次,为什么使用StringBuilder而不是String进行连接?
最后,我对这行代码有点迷茫。这在加密过程中是如何工作的?我所知道的是,当消息中的大写字母被加密时,它应该返回一个大写值。
((char) ('A' + (i - 'A' + offset) % 26 ))
任何形式的帮助/解释都将不胜感激。
【问题讨论】:
标签: java