public class CaesarCipher {
// 加密方法
public static String encrypt(String text, int shift) {
shift = shift % 26 + 26; // 确保shift为正数
StringBuilder encrypted = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
char ch = text.charAt(i);
if (Character.isLetter(ch)) {
// 区分大小写进行加密
if (Character.isUpperCase(ch)) {
ch = (char) (((ch - 'A') + shift) % 26 + 'A');
} else {
ch = (char) (((ch - 'a') + shift) % 26 + 'a');
}
}
encrypted.append(ch);
}
return encrypted.toString();
}
// 解密方法,实际上和加密方法一样,只是shift取反
public static String decrypt(String text, int shift) {
return encrypt(text, 26 - (shift % 26)); // 通过取反shift来实现解密
}
public static void main(String[] args) {
String originalText = "Hello World!";
int shift = 3; // 向右移动3位
String encryptedText = encrypt(originalText, shift);
System.out.println("Encrypted: " + encryptedText);
String decryptedText = decrypt(encryptedText, shift);
System.out.println("Decrypted: " + decryptedText);
}
}
这段代码展示了如何使用Java实现一个简单的凯撒加密算法。它包括了加密(`encrypt`)和解密(`decrypt`)方法,两者都通过修改字符在字母表中的位置来实现。注意,解密方法实际上是通过计算加密时shift的逆操作来完成的,这里利用了模运算的性质来实现。